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

最近项目需要用到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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值