學習了NDK有一段時間了,自學真的蠻辛苦的,所以做一下筆記:
如今NDK已經出到了R5了,前段時間一直用android-ndk-1.6_r1-windows這個低版本的。
第一步,使用NDK前必須安裝Cygwin,先去網上找個Cygwin最新版本的,才幾十兆。然後找到E:/Cygwin/home/Administrator下的.bash_profile檔案,在尾部加入
NDK=/cygdrive/E/Android/NDK/android-ndk-r5-windows/android-ndk-r5
export NDK
這個是讓Cygwin指定NDK路徑輸入命令cd $NDK就可以進入到NDK的目錄
第二步,使用jni編譯標頭檔.h,
編譯jni時要包含包名,首先進入項目根目錄,然後javah -classpath ../TestJni/bin com.test.Test
就是javah -classpath ../項目名/bin com.test.<類名>
第三步,編譯,開啟Cygwin,輸入命令cd 加上指定項目的jni目錄,然後輸入$NDK/ndk-build進行編譯
第四步,添加Android.mk檔案,裡面屬性有
LOCAL_MODULE := FirstJni 這個為項目名
LOCAL_SRC_FILES := hello-jni.c 這個為要編譯的c檔案,用NDK R5編譯成的so前面會自動加上一個lib,但我們在
static{
System.loadLibrary("FirstJni");
}時不需要前面的lib字串。
編譯成功後控制台出現提示
Compile thumb : FirstJni <= hello-jni.c
SharedLibrary : libFirstJni.so
Install : libFirstJni.so => libs/armeabi/libFirstJni.so
如果出現: java.lang.UnsatisfiedLinkError,可能是因為你的c檔案中的jninative與java上的工程包名不一樣所導致,這樣將不能loadLibrary庫檔案
接下來是如何將Cygwin,NDK綁定到eclipse上面,右鍵工程properties選擇build選項,new一個program,在location上輸入E:/Cygwin/bin/bash.exe,在working directory輸入E:/Cygwin/bin/,在Arguments輸入
--login -c "cd /cygdrive/D/workspace/FirstJni/jni && $NDK/ndk-build"
上面都是我自己電腦的檔案目錄。切換到refresh標籤下,勾選refresh source,轉到build Options,勾選allocate,after,3個during,specefy,選擇工程中的jni目錄,這樣就完成了