編輯:關於Android編程
在上一篇博文中,我們搭建好了Android ndk 的開發環境,作為碼農,我們是不是先來寫一個HelloWorld來表示一下自己的到來。
(1)首先在你的工作空間建一個Android項目,這裡我建立的為NDKHelloWorld。項目結構如圖(1)
、
圖(1)
(2)在MainActivity中聲明你所需要的本地方法,MainActivity的代碼如下所示:
package com.gc.ndkhelloworld; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; /** * * @author Android將軍 * */ public class MainActivity extends Activity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView=(TextView) findViewById(R.id.tv); mTextView.setText(helloWorld()); } /** * 在Java代碼中聲明本地方法 * @return */ public native String helloWorld(); }(2)選中該項目,右擊選擇Android Tools,然後選擇Add Native Support...,如圖(2)所示:
圖(2)
然後出現圖(3)所示情況:
圖(3)
點擊finish之後,會發現項目的目錄結構如圖(4)所示:
圖(4)
下面我們開始實現本地方法,helloworld.cpp的代碼如下:
#include實現完本地方法後,下面我們需要編譯本地庫,選中該項目,右擊選擇Build Project來進行編譯本地庫,編譯完本地庫之後,就需要加載本地庫了。在靜態初始化塊內調用System.loadLibrary加載本地庫,是加載庫的最簡單的方法,本例中加載庫的代碼如下所示:#include /** * @author Android將軍 */ /** * * 實現本地方法時,一個要按照函數命名規則來命名,函數的命名規則如下: * Java_PackageName_ClassName_MethodName * 從這個規則可以看出,任何由Java程序調用的NDK函數名都必須以Java開頭,緊跟著要調用該函數的Java類 * 所在的包名(中間的“.”要改成“_”),然後會跟Java類名,最後是方法名,各部分直接都用“_”連接。 */ extern C { jstring Java_com_gc_ndkhelloworld_MainActivity_helloWorld(JNIEnv *env,jobject obj) { return env->NewStringUTF(NDK,HelloWorld!); } }
static { System.loadLibrary(helloworld); }編譯完本地庫之後,你可以發現libs目錄下多了一個armeabi目錄,這是因為我們沒有為該項目指定一個Application.mk文件,而Android NDK構建系統默認情況下為armeabi ABI生成二進制文件。為了我們的本地庫可以在NDK所支持的所有架構上運行,我們在jni目錄下需要增加一個Application.mk文件,文件內容如下:
APP_ABI := all
如果大家在實現本地方法時,遇到 could not be resolved或Unresolved inclusion:
Chromium的Extension由Page和Content Script組成。如果將Extension看作是一個App,那麼Page和Content Script就是
PullToRefresh 這個庫用的是非常至多,github 今天主要分析一下源碼實現.我們通過ListView的下拉刷新進行分析,其它的類似。整個下拉刷新 父View
首先來看看效果圖:1,SweepGradient(梯度渲染)public SweepGradient (float cx, float cy, int[] colors,
安裝做 Android 安全測試之前你應該知道的工具 (一)分析./androlyze.py -s進入分析的交互界面然後執行apk,d,dx=AnalyzeAPK(&qu