Android Studio NDK

来源:互联网 发布:青苹软件 编辑:程序博客网 时间:2024/06/05 20:21

Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK开发是为了项目需要调用底层的一些C/C++的一些东西;另外就是为了效率更加高些,安全性更高。


一 、新建项目

把NDK 环境配置好,新建一个文件

public class JniUtils {    public static native String getStringFromC();    static {        System.loadLibrary("NdkJniDemo");     }}

 然后 Make Project

完成以后去查看,这时候打开如下图的文件夹看是否生成了classes文件夹,没有生成请重新来过。 



再打开Terminal输入指令,
<span style="white-space:pre"></span>cd app/build/intermediates/classes/debug
然后再输入指令
<span style="white-space:pre"></span>javah -jni ndktest.ndkdemo.JniUtils
这时候打开classes/debug下面的文件发现多了一个文件 ndktest_ndkdemo_JniUtils.h

然后在src/main下新建文件夹jni,把生成的.h文件复制或者剪切到jni文件夹下面去,新建一个c类随便取一个名字,添加代码如下

#include "ndktest_ndkdemo_JniUtils.h"JNIEXPORT jstring JNICALL Java_ndktest_ndkdemo_JniUtils_getStringFromC        (JNIEnv *env, jobject obj){    return (*env)->NewStringUTF(env,"Jni String ");}
在gradle.properties文件末尾添加android.useDeprecatedNdk=true就ok啦
然后在 build.gradle ->defaultConfig括号内添加如下代码
ndk {       moduleName "NdkJniDemo"            abiFilters "armeabi", "armeabi-v7a", "x86"}

在JniUtils类里面添加如下代码 ,方法里代码名字和build.gradle ->defaultConfig->ndk ->moduleName 必须一致

static {       System.loadLibrary("NdkJniDemo");}


到这步就可以调用了。

打开app->intermediates-ndk-debug发现生成了三个文件夹,并且对应了之前我们在build.gradle配置的abiFilters
大功告成。

在main目录下新建Jnilibs文件夹把这三个文件夹放进去,删除jni下的文件。即可调用。












1 0