一 下载NKD,并解压
官网:https://developer.android.com/index.html
二 新建项目
1 新建Android Studio项目
2 项目配置NDK路径
3 gradle.properties 增加
//使用NDK
android.useDeprecatedNdk=true
3 项目的build.gradle defaultConfig增加
ndk {
moduleName "native-jni" // 生成的so动态库名称
abiFilters "armeabi", "armeabi-v7a", "x86" // 输出指定三种abi体系结构下的so库
}
三 写相关代码
1 新建jni目录
2 新建jni调用类
public class JNIUtils {
// 加载native-jni
static {
System.loadLibrary("native-jni");
}
//java调C中的方法都需要用native声明且方法名必须和c的方法名一样
public native String stringFromJNI();
}
3 打开底部Terminal 进入到 ../src/main/java路径下 生成 .h文件
javah -d jni com.example.bxlt.myapplication.JNIUtils
成功后生成对应文件
-
jni路径下新建c文件,保持名字一致
内容如下
#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的内容说明:这三个地方名字一致
5 Android 调用
TextView tv = findViewById(R.id.tv);
tv.setText(new JNIUtils().stringFromJNI());
6 SO文件