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
感谢原作者Carson.Ho










