AS之NDK開發流程
阿新 • • 發佈:2019-01-30
1. 安裝配置NDK 1). 解壓NDK的zip包到非中文目錄 2). 配置path : 解壓後NDK的根目錄----->ndk-build 2. 給AS配置關聯NDK 1). local.properties中新增配置 ndk.dir=D\:\\android-ndk32-r10-windows-x86_64\\android-ndk-r10 2). gradle.properties中新增配置 android.useDeprecatedNdk=true 3. 編寫native方法: public class JNIS { public native String helloJNI(); } 4. 定義對應的JNI 1). 在main下建立jni資料夾 2). 生成native方法對應的JNI函式宣告標頭檔案: 命令視窗中, 進入java資料夾 執行命令: javah com.atguigu.jnitests2.JNIS 生成標頭檔案: com_atguigu_jnitests2_JNIS.h 函式宣告: JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI(JNIEnv *, jobject); 3). 將生成的標頭檔案轉移到jni資料夾下 4). 在jni下定義對應的函式檔案: test.c #include "com_atguigu_jnitests2_JNIS.h" JNIEXPORT jstring JNICALL Java_com_atguigu_jnitests2_JNIS_helloJNI (JNIEnv * env, jobject jobj) { return (*env)->NewStringUTF(env, "Hello from C"); } 5). 在jni資料夾下建立一個空的C檔案: empty.c 說明: 這是AS的bug, 必須至少2個C檔案才能通過編譯 5. 指定編譯的不同CPU defaultConfig { ndk{ moduleName "HelloJni" //so檔案: lib+moduleName+.so abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的型別 } } 6. 編譯生成不同平臺下的動態連結檔案 1). 執行rebuild, 生成so檔案 2). so檔案目錄: build\intermediates\ndk\debug\lib\..... 7. 呼叫native方法: 1). 在native方法所在的類中載入so檔案 static { System.loadLibrary("HelloJni"); } 2). 在Activity中呼叫native方法: String result = new JNIS().helloJNI(); Log.e("TAG", "result="+result);