一、JNI简介
- 什么是JNI?
JNI(Java Native Interface,Java本地接口),用于衔接Java层与Native(C/C++)层。Java可以通过JNI调用本地的C/C++代码,本地的C/C++代码也可以通过JNI调用Java代码。
这不是Android系统所独有的,而是Java所有。众所周知,Java语言是跨平台的语言,而这跨平台的背后都是依靠Java虚拟机,虚拟机采用C/C++编写,适配各个系统,通过JNI为上层Java提供各种服务,保证跨平台性。
- 为什么需要JNI?
效率 C/C++是本地语言,比Java更高效,在对性能要求较高的场合,需要使用C/C++来实现程序逻辑;
代码复用 可以复用一些C/C++开发的功能模块;
反编译 Java反编译比C语言容易,一般加密算法是用C语言编写的,不容易被反编译;
硬件控制 Java运行在虚拟机中,和真实的物理硬件之间是相互隔离的,通常我们使用本地代码C/C++实现对硬件驱动的控制,然后再通过Java代 码调用本地硬件控制代码。
- JNI的适用场景
- 对代码运行速度有要求的场合;
- 本地代码复用;
- 一些核心功能,不想被反编译的场景;
- 对底层硬件需求控制的场合;
Java与Native层的关系下图所示: