1、什么是NDK?
JNI是为了方便Java调用C、C++等本地代码而封装的一层接口。NDK是一个工具集合,调用NDK可以很方便的使用JNI。
2、在Android Studio中配置
1、下载NDK:https://developer.android.com/ndk/downloads/index.html
2、配置PATH=F:\li_yi\tools\Android\android-ndk-r12b
3、在AS中关联NDK,ndk.dir=F:\li_yi\tools\Android\android-ndk-r12b
3、NDK开发
1、新建一个类,增加native方法:
public class NDKTest {
public native String getTestStr();
}
2、得到.h文件
2.1、执行build---make project,会得到一个class文件
(在XXX\app\build\intermediates\classes\debug\com\liyi\jnitest目录下)。
2.2、点开AS的Terminal标签,
进入到XXX\app\build\intermediates\classes\debug目录下(cd 命令),
执行javah命令生成h文件:
javah -jni com.liyi.jnitest.NDKTest
2.3、在main目录下新建一个jni目录,剪切该文件到改目录下。
.h文件:
#include"com_liyi_jnitest_NDKTest.h"
JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr
(JNIEnv *env,jobject obj){
return(*env)->NewStringUTF(env,
"Java_com_liyi_jnitest_NDKTest_getTestStr!");
}
3、新建一个c文件,实现在DNKTest中定义的native方法
#include "com_liyi_jnitest_NDKTest.h"
JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,
"Java_com_liyi_jnitest_NDKTest_getTestStr!");
}
4、在app module目录下的build.gradle中设置库文件名(生成的so文件名)
defaultConfig {
......
ndk{
moduleName "NDKTest" //生成的so名字
//输出指定三种abi体系结构下的so库。目前可有可无。
abiFilters "armeabi", "armeabi-v7a", "x86"
}
5、在NDKTest中,静态初始化load代码,
static {
System.loadLibrary("NativeExample");
}
6、打开Project的gradle.properties文件,添加
android.useDeprecatedNdk=true
7、同步操作:
Tools->Android->Sync Project with Gradle Files
8、生成SO文件:Build->Rebuild Project
在项目的app\build\intermediates\ndk\debug\lib路径下生成SO文件
9、使用生成SO文件:
在jnitest\src\main下新建文件夹jniLibs,并将生成的SO文件拷贝到该文件夹下。
代码:
http://download.csdn.net/detail/le_shuo/9591352
参考:
网友评论