Android进阶JNI开发(二)

前言:

上一篇博客我们讲到了Android  studio 开发jni的基本配置,这一篇博客我们主要讲java和c++之间通过jni是如何交互的.

  • 我们先创建两个方法,一个是java调用c++,一个是c++调用java的方法
  • java调用的c++方法需要使用"native"进行修饰,表示是一个本地方法,不需要进行实现.

  • 我们要c++中创建一个与java一样的方法

根据上图的标记的顺序进行讲解:

1.include  可以理解成java中的import
2."JNIEXPORT" 同java中的jni方法要被native修饰一样
3.方法名就是对应java中包名_类名_方法名
4.JNIEnv:JNIEnv 可以说是整个 JNI 的核心类,是 Java 和 C 通讯的桥梁,它可以协助我们将
 JNI 类型转换成 C 类型,不仅如此,调用 Java 对象的方法,获取或者修改属性,都是由 JNIEnv 来做。
  

   
  • jstring就是java中传来的一个参数,在java里面是String,在这里是jstring
  • 这是一张java-jni数据数据类型对应表
  • 接下来我们看看是如何调用java的方法的
    静态调用方式
  •  
非静态方法
调用java的静态字段
  • 通过上面的代码我们可能发现了在参数里面出现了 jclass 和 jobject 两个不同类型的参数,它是起到什么作用jclass:可以看java中的class,jobject:可以看做java中的this
  • 获取java中有参数的方法  如:env->GetMethodID(class,"",sig)对于最后一个参数代表的java中的参数类型,这时候会产生一个 疑问,如何填写这样的参数,
  • boolean:Zbyte:Bchar:Cshort:Sint:Ilong:Jfloat:Fdouble:Dvoid:V
  • [数组]:[和类型Object对象:L包名/类名; 或 包名/类名$标识嵌套类;
  • 例子(方法 ->- 对应的sig):
Java方法对应的sig
void M1(int A,int B) "(II)V"
void M2(String S) "(Ljava/lang/String;)V"
 
void M3(int[] I)
 
"([I)V"
String M4(String S,int index)
 
"(Ljava/lang/String;I)V"
  • 上面的表格中就是一些基本的参数,大家可以参看练习,举一反三

 

已经就是jni使用的一些基本函数, 上面代码的demo我会同步到github

Android技术交流:973579144

我的github开源项目

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值