JNI简介及语法介绍

JNI简介及语法介绍

一、JNI简介

​ Android的应用层由java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架层,是因为java代码是与硬件环境彻底“隔离”的跨平台语言,java代码无法直接操作硬件。

​ Android系统基于Linux操作系统,在Linux操作系统中C/C++通过Linux提供的系统调用接口可以直接访问传感器硬件驱动,Java代码可以将自己的请求,交给底层的本地C/C++代码实现间接的对传感器的访问。另外,Java代码的执行效率更比C/C++执行效率要低,在一些对性能要求比较高的场合,也要使用C/C++

来实现程序逻辑。

  • JNI是Java native interface的缩写,中文为Java本地调用。从java1.1开始,Java native interface(JNI)标准成为Java平台的一部分,它允许Java代码与其他语言写的代码进行交互。

  • JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如使用一些旧的库与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码工作在任何Java虚拟机实现下。

二、JNI数据类型的转化

  • jni在Java和C、C++等语言之间建立了一个桥梁的作用,因此,jni首先要做的,就是统一两者间的数据类型。
  • 所有其他引用类型,在jni中被定义为jobject类型,在C中都定义为void*。
1.基本数据类型:

在这里插入图片描述

2.引用数据类型:

​ Java类型--------------------------------Native Type------------------------------- 描述

在这里插入图片描述

三、JNI签名的转化

  • Java中可以直接调用底层语言的函数或方法,jni规定了Java调用底层语言的方法签名规范。

在这里插入图片描述

四、方法转换规则

  • 函数签名通常是以下结构:

返回值 fun(参数1,参数2,参数3);

  • 其对应的jni方法签名格式为:

(参数1参数2参数3)返回值

  • 注意:

    函数名,在jni中没有体现。

    参数列表相挨着,中间没有逗号,没有空格。

    返回值出现在( )后面。

    如果参数是引用类型,那么参数应该为:L类型;

例子:

C函数 :int list(int a,int b[]);

jni签名:(I[I)I;

C函数 :string test (int a,string b);

jni签名:(I[ILjava/lang/string;)Ljava/lang/string;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值