一、关联NDK开发库
在Project Structure直接导入NDK或者在local.propertise里手动添加NDK路径
导入之后再local.propertise可以看到SDK及NDK路径
二、创建native方法
public class Ndk {
static{
System.loadLibrary("MyJni");
}
public native String getMsg();
}
然后Build->Make Project一下,目的就是编译成对应的class文件。
在Terminal命令控制台根据生成的class文件,利用javah生成对应的 .h头文件。如果没有编译就执行javah命令会提示找不到这个类文件的。
进入该项目main文件夹
cd app\src\main
生成.h头文件
javah -d jni -classpath D:/sdk/platfroms/android-23/android.jar;../../build/intermediates/classes/debug com.tl.ndkdemo.MainActivity
说明:
-d jni 在工程下生成jni目录,存放生成的c/c++源文件
-classpath D:/sdk/platfroms/android-23/android.jar SDK文件下相应版本的android.jar所在的文件位置
../../build/intermediates/classes/debug example.daosong.com.ndkdemo.ndk 是Ndk.java编译后对应的class文件。文件目录如下
三、编写C/C++代码
在生成的jni目录下编译c/c++源代码
#include "com_tl_ndkdemo_Ndk.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_com_tl_ndkdemo_Ndk_getMsg
(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env, "NDK 测试成功");
}
四、 配置
1、在mudle的gradle.build
ndk {
moduleName "myJni" //ndk库名
ldLibs "log"//导入NDK库
abiFilters "armeabi", "armeabi-v7a", "x86" //适应平台
}
2、在project的gradle.propertise中添加
android.useDeprecatedNdk=true
五、可能异常,可尝试以下几种方法
1、可在moudle的gradle.build的android节点下添加
sourceSets.main {
jni.srcDirs = ["src/main/jni"]
}
2、有时会出现将../../build/intermediates/ndk下的android.mk复制到jni目录下