NDK JNI開發配置以及Demo
NDK開發環境搭建—-AndroidStudio
本片文章用於講解windows下android studio 的NDK環境搭建以及Demo展示:
Android Studio搭建
開發軟體:
1 NDK下載:https://developer.android.google.cn/ndk/downloads/index.html
2 Cygwin下載:https://cygwin.com/install.html
1. 配置ndk
1)配置NDK的環境變數(在系統環境變數中配置,不贅述):
2)開啟Android Studio(後面簡稱AS),依次點選File->Project Structure->SDK Location,到如下介面,選擇你的NDK所在的目錄,選擇完之後點選ok,就可以了:
2. 配置使用Terminal(如果已經配置跳過)
使用ctrl + alt +s開啟settings,然後操作setting->Tools->Terminal,配置cmd.exe這樣就可以在Terminal裡面做dos命令(後面用來生成jni檔案)。
3. 寫JniDemo
1) 首先在專案中新建一個類JniClient,如:
這裡做一下講解,這個裡面有兩個靜態方法,都是用native修飾,意思表示是JniClient類裡面有兩個本地方法helloWord和calculate,但是這裡顯示的是紅色說明我們只是宣告,但是AS沒有找到這兩個方法。下面就來建立方法
2)建立玩JniClient類之後
make 一下專案,AS會在在專案的app\build\intermediates\classes\debug\ zj\guyue\testjni 下建立JniClient.class位元組碼檔案,之後建立jni資料夾如下:
開啟AS命令列視窗(View->Tool Window->Terminal)。輸入如下命令:
javah -d jni -classpath E:\5-ProjectFile\2-AndroidStudio\TestJNI\app\build\intermediates\classes\debug zj.guyue.testjni.JniClient
可以在剛剛建立的jni資料夾下看到對應的.h檔案(生成的檔名稱規則:包名_ 類名.h,包名的點變成 _)
3)建立c程式碼
建立c檔案
編寫C程式碼
#include <zj_guyue_testjni_JniClient.h>
JNIEXPORT jstring JNICALL Java_zj_guyue_testjni_JniClient_helloWord(JNIEnv *env, jclass obj){
return (*env)->NewStringUTF(env,"guyuelan");
}
JNIEXPORT jint JNICALL Java_zj_guyue_testjni_JniClient_calculate(JNIEnv *env,jclass obj,jint a,jint b){
return a + b;
}
4)配置專案引數
在gradle.properties 裡面加上:android.useDeprecatedNdk=true
在gradle的defaultConfig裡面新增
ndk{ moduleName "JniClient" // 生成的so檔名 abiFilters "armeabi","x86","armeabi-v7a" //CPU型別 }
5)生成so檔案
專案引數配置好之後,直接rebuild一次,然後在專案的build目錄下就有對應的so檔案。
這樣AS的JNI使用就OK了~,至於引用so檔案簡單的說下:將生成的3個型別的資料夾(含so檔案)拷貝到專案的libs資料夾下就可以直接引用了,看下呼叫結果。
常見的錯誤解決辦法:
- 報錯說“….找不到檔案”/…Not Found…——>你的NDK本身有問題重新下載一個
- 報錯說: ….ndk.cmd….錯誤———->你在jni資料夾下新增一個空的empty.c檔案(為什麼這樣,我在網上找了很久,說是AS整合jni,不是很友好….目前也沒有明確,為什麼這麼說,你可以去你的jni資料夾下看看你寫的c檔案,即使編譯成功,生成so檔案,但是c檔案裡還是顯示紅色。)