第一次尝试使用 AS 调用JNI~

来源:互联网 发布:大数据与BI 编辑:程序博客网 时间:2024/06/05 05:45

最近项目需要用到NDK编程,要学会如何在AS里调用 jni ,走了不少坑,下面就把自己的心路历程写下来,做个记录。
第一步,下载NDK ,建议下载 最新的包,android-ndk-r12b ,开始用了r10b的包编译的时候有点问题,点击下贼链接:点我点我
第二步,新建一个项目 NdkDemo,项目grade配置有点不一样 下面看图:
这里写图片描述
这里写图片描述
这里gradle版本 不能用正常gradle编译 ~·有待研究,这里之前漏了,下文就找了半天的错
第三步,新建一个类Test,看下代码:

public class Test {   public native  String  getMsg(); }

报错红字 可以忽略 ,直接 make project. 通过了就行

在项目 app/build/intermediates/classes/debug 目录下找到 刚才生成的 class 文件,请注意不是.java
然后 cmd 命令 进入 这个目录
这个命令的格式是 javah -classpath .-jni com.xxx.xx.Test
这里写图片描述
如果看到 无输出 东西 ,那就拍手鼓掌了,我一直是 下面那个图
这里写图片描述
这里是关键点了,我试了好久 ,才发现 自己ClassPath环境没配置,坑爹啊
第四步:上面通过的话 会生成com_xxx_xxx_Test.h的 C的头文件
自己在app/main/java同级建一个jni文件夹,把上面的C文件 剪切过来,然后 建一个XXX.C文件 ,这个就是c的代码库 代码如下

#include "com_live_ndkdemo_Test.h"JNIEXPORT  jstring JNICALL Java_com_live_ndkdemo_Test_getMsg(JNIEnv *env,jobject obj){    return (*env)->NewStringUTF(env,"我是来自 JNI");}

做到这步,回过头在把gradle配置文件 改下,Test类导入so库 即可

 android.ndk {        moduleName = "test"        ldLibs += "log"        abiFilters += "armeabi"        abiFilters += "armeabi-v7a"        abiFilters += "x86"    }
public class Test {   public native  String  getMsg();   static {      System.loadLibrary("test");   }}

然后自己编译成 apk ,然后解压下 就能看的 三个平台so库了~
——坑都是自己走出来才记忆深刻~待续

0 0