1.JNI介绍
1.1 简介
-
定义:
Java Native Interface
,即Java
本地接口 -
作用: 使得
Java
与 本地其他类型语言(如C、C++)交互
即在Java
代码 里调用C、C++
等语言的代码 或C、C++
代码调用Java
代码 -
特别注意:
JNI
是Java
调用Native
语言的一种特性JNI
是属于Java
的,与Android
无直接关系
1.2 为什么要有 JNI
- 背景:实际使用中,
Java
需要与 本地代码 进行交互 - 问题:因为
Java
具备跨平台的特点,所以Java
与 本地代码交互的能力非常弱 - 解决方案: 采用
JNI
特性 增强Java
与 本地代码交互的能力
1.3 实现步骤
- 在
Java
中声明Native
方法(即需要调用的本地方法) - 编译上述
Java
源文件javac
(得到 .class文件) - 通过
javah
命令导出JNI
的头文件(.h文件) - 使用
Java
需要交互的本地代码 实现在Java
中声明的Native
方法
如Java
需要与C++
交互,那么就用C++
实现Java
的Native
方法 - 编译
.so
库文件 - 通过
Java
命令执行Java
程序,最终实现Java
调用本地代码
2.NDK介绍
2.1 简介
- 定义:
Native Development Kit
,是Android
的一个工具开发包
NDK
是属于Android
的,与Java
并无直接关系 - 作用:快速开发
C、 C++
的动态库,并自动将so
和应用一起打包成APK
即可通过NDK
在Android
中 使用JNI
与本地代码(如C、C++)
交互 - 应用场景:在
Android
的场景下 使用JNI
即Android
开发的功能需要本地代码(C/C++)
实现 - 特点
- 额外注意
2.2 使用步骤
- 配置 Android NDK环境
- 创建 Android 项目,并与 NDK进行关联
- 在 Android 项目中声明所需要调用的 Native方法
- 使用 Android需要交互的本地代码 实现在Android中声明的Native方法
比如 Android 需要与 C++ 交互,那么就用C++ 实现 Java的Native方法 - 通过 ndk - bulid 命令编译产生.so库文件
- 编译 Android Studio 工程,从而实现 Android 调用本地代码
3. NDK与JNI关系
4. 具体使用
4.1 Android Studio2.2 以下实现NDK
我用不到不写了
4.2 Android Studio2.2 以上实现NDK
- 如果你的Android Studio是2.2以上的,那么请采用下述方法
因为Android Studio2.2以上已经内部集成 NDK,所以只需要在Android Studio内部进行配置就可以,具体可以查看我的另一篇文章:
Android Sudio配置NDK