进去正题前,我们先来看下JVM的工作原理,或者说Java代码的执行步骤,如下图:
Java源文件(.java文件)是如何一步步执行的,如上图所示,首先Java源文件经过Java编译器(javac或ECJ)将.java文件编译为Java字节码文件,然后JRE加载Java字节码文件,载入系统分配给JVM的内存区,然后执行引擎解释或编译类文件,再由即时编译器将字节码转化为机器码。从而达到在机器上能够运行。
JNI(Java Native Interface)是 java 与 C/C++ 进行通信的一种技术。众所周知,Java语言是跨平台的语言,而这跨平台的背后都是依靠Java虚拟机,虚拟机采用C/C++编写,适配各个系统,通过JNI为上层Java提供各种服务,保证跨平台性。Android 中的 Framework 层与 Native 层就是采用的JNI技术。
我们知道, Android 系统是基于 Linux开发,采用的是 Linu x内核。 Android APP 开发大部分也要和系统打交道,只是 Android FrameWork 帮我们处理了和系统相关的操作。我们从Android 系统的分成结构可以看出,Android FrameWork 是通过JNI与底层的C/C++库交互,例如:FreeType,OpenGL,SQLite,音视频……
如果程序需要调用自己的C/C++函数库,就必须用到JNI/NDK开发。
Java代码调用C代码
C代码调用Java代码