前言
我们知道,Android系统是基于Linux开发,采用的是linux内核 ,Android APP开发大部分也要和系统打交道,只是Android FrameWork 帮我们处理了和系统相关的操作, 我们从Android 系统的分成结构可以看出,Android FrameWork是通过JNI与底层的C/C++库交互,例如:FreeType,OpenGL,SQLite,音视频等等。
如果我们程序也需要调用自己的C/C++函数库,就必须用到JNI/NDK开发。
名称解释
JNI:JNI(Java Native Interface)是Java与C/C++进行通信的一种技术,使用JNI技术,,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。Android中的Framework层与Native层就是采用的JNI技术。
NDK: 是一系列工具的集合,提供了一系列的工具,帮助开发者快速开发 C(或C++)的动态库(so库),并能自动将 so 和 java 应用一起打包成 apk。开发时,NDK工具可以把c/c++ ->编译成一个 linux下可以执行的二进制文件, java代码里面就可以通过jni 调用执行二进制的文件。
JNI使用原因
JNI会学习到比较底层的东西,java可以实现上层应用的开发,但是不能写底层驱动,有些android项目必须和底层硬件打交道,比如要精确快速的获取某种传感器的值,那么java是不能办到的,那怎么办,就通过JNI开发,通过c/c++完成底层驱动或者值得获取,然后将值传回到java层。同样java层也可以将数据传递给c/c++层,这样通过JNI完成数据的交互。
JNI开发用途
JNI开发用途:驱动开发 (wifi-hotspot) 2.3无线热点共享 ,Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg),复用代码(文件压缩,人脸识别…)等。
总结:JNI是一种Java与C/C++进行通信的协议,应用层是java代码,通过jni可以实现与底层C/C++通信。