一 下載NKD,并解壓
官網(wǎng):https://developer.android.com/index.html
二 新建項(xiàng)目
1 新建Android Studio項(xiàng)目
2 項(xiàng)目配置NDK路徑
image.png
3 gradle.properties 增加
//使用NDK
android.useDeprecatedNdk=true
3 項(xiàng)目的build.gradle defaultConfig增加
ndk {
moduleName "native-jni" // 生成的so動(dòng)態(tài)庫(kù)名稱
abiFilters "armeabi", "armeabi-v7a", "x86" // 輸出指定三種abi體系結(jié)構(gòu)下的so庫(kù)
}
三 寫相關(guān)代碼
1 新建jni目錄
2 新建jni調(diào)用類
public class JNIUtils {
// 加載native-jni
static {
System.loadLibrary("native-jni");
}
//java調(diào)C中的方法都需要用native聲明且方法名必須和c的方法名一樣
public native String stringFromJNI();
}
3 打開(kāi)底部Terminal 進(jìn)入到 ../src/main/java路徑下 生成 .h文件
javah -d jni com.example.bxlt.myapplication.JNIUtils
成功后生成對(duì)應(yīng)文件
image.png
-
jni路徑下新建c文件,保持名字一致
image.png
內(nèi)容如下
#include "com_example_bxlt_myapplication_JNIUtils.h"
JNIEXPORT jstring JNICALL Java_com_example_bxlt_myapplication_JNIUtils_stringFromJNI
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"這里是C++代碼");
}
C的內(nèi)容說(shuō)明:這三個(gè)地方名字一致
image.png
5 Android 調(diào)用
TextView tv = findViewById(R.id.tv);
tv.setText(new JNIUtils().stringFromJNI());
image.png
6 SO文件
image.png