Android NDK JNI 入门

搞安卓也有2年了,不过JNI一直都没接触过。最近项目需求需要用到这方面,所以上网搜了下相关的资料。搞了一上午,借鉴别人的东西,出了几个小问题,终于弄好了。


1,首先你得在项目里配置好NDK的路径。这我就没必要截图了。


2  先写一个工具类,用来加载so库以及native方法(尽管这时候还没有so库)


在这里我定义了两个方法,一个返回int类型,一个返回String类型。


3 接下来便是生成h文件,也就是头文件.这里是利用javah生成。

  首先进入Terminal窗口



进入debug下的classes目录

 cd  app/build/intermediates/classes/debug  

   第二部就是生成h文件了

  输入 javah -jni qj.hellojni.TestJni 

 注意路径要完整


输入之后,你就会在app/build/intermediates/classes/debug这个路径下发现一个h文件,复制到jni目录下。这个jni目录需要你自己在main文件夹下创建。如下图



h头文件的内容是这样的。



4 创建相应的cpp文件。

 

方法名我是直接从h文件复制过来的。接下来实现相应的方法就好了。  


写完cpp之后,还需要在gradle中配置一下。


设置允许使用ndk


还需要设置so的名字,注意要与之前system.loadlibrary名字对应



  编译的时候遇到个问题,第一个方法没错误。有错误的是第二个方法。

第二个方法刚开始的时候是写 

(*env)->NewStringUTF(env, "Hello from JNI !");

结果报错了,错误信息为

error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'


后面上网搜了下,错误原因是因为这是C的写法。而CPP是属于C++的,所以应该改成
  
env->NewStringUTF("laizhijni");
 
 
改了之后,终于可以调用这两个方法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值