作者:EasyWave 时间:2015.01.25
类别:Android系统-基于Android2.3.5系统:JNI与HAL实例解析[一] 声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......
***************************************************************************************************************************
一:Android系统下JNI简介
Android系统下的JNI的全称是:Java Native Interface (JNI),JNI标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。
二:为什么Java要推出JNI
JNI在Android系统中有着广泛的应用。Android系统底层都是C/C++实现的,上层提供的API都是Java的,Java通过JNI调用底层的实现。
- Java世界虚拟机使用Native语言编写的,虚拟机运行在具体的平台上,虚拟机本身无法做到与平台无关,jni可以对java层屏蔽不同平台操作的差异,这样就能实现java本身平台无关特性。
- 适应已经用Native语言实现的技术。
- 一些效率的问题需要Native语言实现。
在Java中使用JNI主要是为了以上几点而实现的,在Anroid中的API多媒体接口MediaPlayer类,其实底层通过JNI调用libmedia库。由于JNI的存在可以让我们重用很多已经存在C/C++的库,省去了重复开发的麻烦,并且可以利用很多开源的库(Android库中就有很多开源库,比如libjpeg,libpng等等),并且让我们开发的程序更有效率(C/C++代码发挥硬件最佳性能)。
三:Java中JNI调用过程
在Java的世界里,JNI对于应用本身来说,可以看做一个代理模式,而对于开发者来说,需要使用C/C++来实现一个代理程序来实际操作目标原生函数,Java程序中则是JVM通过加载并调用JNI程序间接地调用目标原生函数。其调用的示意图如下: