Step1 创建NDK项目
注意勾选include C++ support
然后都是默认选项
Step2 创建本地JNI测试类
/**
* @auther:HWQ
* @description:
* @date:2018-09-25
* @time:22:04
*/
//创建JNI类
public class JNITest {
//加载类库名称 稍后生成的so文件与此处命名有关联
static {
System.loadLibrary("MyNDK");
}
//写一个测试JNI类的native方法 这里就写一个求和方法 最开始创建时报红是正常的
public native int getSum(int a, int b);
}
Step3 生成C++头文件
进入到JNITest类下,然后输入javah JNI类全路径生成C++的头文件。生成后需要稍等片刻才可以看见生成的头文件。
Step4 将生成的头文件复制到CPP文件夹下并改名。
例如改名为JNITest.h
然后创建cpp文件JNITest.cpp,并补全cpp文件中测试代码。然后删除最初生成的头文件com_ndk_archermind_myndk_JNITest.h。
//导入jni.h头文件
#include <jni.h>
//导入JNI本地类生成的JNITest.h头文件 注意此处不能使用include <JNITest.h> 而要使用include "JNITest.h"这样引入 不然会报错
#include "JNITest.h"
JNIEXPORT jint JNICALL Java_com_ndk_archermind_myndk_JNITest_getSum
(JNIEnv *, jobject, jint a, jint b) {
return a + b;
};
然后同步代码,此时再看JNITest类native方法已经不再报红,变成灰色
Step5配置CMakeLists文件和Moudle下的build.gradle文件
CMakeLists文件修正如下 注意在CMakeLists下备注要在备注的前面加#符号
加//会不识别备注而报错
其中类库名称是来自于JNITest这个本地类中的加载库代码来的,两者需要保持一致,即与下图中的命名要一致
Moudle下的build.gradle文件如下
Step6 在MainActivity中添加测试JNITest类代码
效果图如下