defaultConfig {
applicationId "com.iteast.jnitest"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
abiFilters "x86"//這個可以省略,省略後就會生成所有類型的動態庫文件
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
-
打開一個項目,從菜單欄中選擇 Tools > Android > SDK Manager 。
-
點擊 SDK Tools 選項卡。
-
勾選 LLDB,CMake 和 NDK 。如圖一:
-
創建本地方法
/**
* A native method that is implemented by the 'test_jni' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("test_jni");
}
- 使用javah生成頭文件(如果會直接寫頭文件,沒有必要使用javah),注意Android Studio項目,Terminal需要定位到程序包目錄(即src\java目錄下如圖二)
- main目錄下新建一個JNI Folder,如圖三
- 在jni文件中寫C\C++代碼
#include<stdio.h>
#include<stdlib.h>
#include<jni.h>
jstring Java_com_iteast_jnitest_MainActivity_stringFromJNI(JNIEnv* env,jobject obj){
char* text = "哈哈哈,今天研究了一下JNI!!!";
return (**env).NewStringUTF(env,text);
}
- 運行項目即可執行C\C++方法
- so文件生成地方,如圖四,如果使用so文件,請在main目錄下,創建與java目錄平級的jniLibs目錄,把相應的so文件放入裏面