一、什么是 JNI
定义:Java Native Interface,即 Java本地接口
作用:使得Java 与 本地其他类型语言(如C、C++)交互
特别注意:
JNI是 Java 调用 Native 语言的一种特性
JNI 是属于 Java 的,与 Android 无直接关系
二、为什么要有 JNI
背景:实际使用中,Java 需要与 本地代码 进行交互
问题:因为 Java 具备跨平台的特点,所以Java 与 本地代码交互的能力非常弱
解决方案: 采用 JNI特性 增强 Java 与 本地代码交互的能力
三、实现步骤
在Java中声明Native方法(即需要调用的本地方法)
编译上述 Java源文件javac(得到 .class文件)
通过 javah 命令导出JNI的头文件(.h文件)
使用 Java需要交互的本地代码 实现在 Java中声明的Native方法
编译.so库文件
通过Java命令执行 Java程序,最终实现Java调用本地代码
四、交叉编译
1、交叉编译的概念
交叉编译即在一个平台,编译出另一个平台能够执行的二进制代码
主流平台有: Windows、 Mac os、 Linux
主流处理器: x86、 arm、 mips
2、交叉编译的原理
即在一个平台上,模拟其他平台的特性
编译的流程: 源代码-->编译-->链接-->可执行程序
3、交叉编译的工具链
多个工具的集合,一个工具使用完后接着调用下一个工具
4、常见的交叉编译工具
NDK(Native Development Kit): 开发JNI必备工具,就是模拟其他平台特性类编译代码的工具
CDT(C/C++ Development Tools): 是Eclipse开发C语言的一个插件,高亮显示C语言的语法
Cygwin: 一个Windows平台的Unix模拟器