一、什么是 JNI
定義:Java Native Interface,即 Java本地接口
作用:使得Java 與 本地其他類型語(yǔ)言(如C、C++)交互
特別注意:
JNI是 Java 調(diào)用 Native 語(yǔ)言的一種特性
JNI 是屬于 Java 的,與 Android 無(wú)直接關(guān)系
二、為什么要有 JNI
背景:實(shí)際使用中,Java 需要與 本地代碼 進(jìn)行交互
問題:因?yàn)?Java 具備跨平臺(tái)的特點(diǎn),所以Java 與 本地代碼交互的能力非常弱
解決方案: 采用 JNI特性 增強(qiáng) Java 與 本地代碼交互的能力
三、實(shí)現(xiàn)步驟
在Java中聲明Native方法(即需要調(diào)用的本地方法)
編譯上述 Java源文件javac(得到 .class文件)
通過(guò) javah 命令導(dǎo)出JNI的頭文件(.h文件)
使用 Java需要交互的本地代碼 實(shí)現(xiàn)在 Java中聲明的Native方法
編譯.so庫(kù)文件
通過(guò)Java命令執(zhí)行 Java程序,最終實(shí)現(xiàn)Java調(diào)用本地代碼
四、交叉編譯
1、交叉編譯的概念
交叉編譯即在一個(gè)平臺(tái),編譯出另一個(gè)平臺(tái)能夠執(zhí)行的二進(jìn)制代碼
主流平臺(tái)有: Windows、 Mac os、 Linux
主流處理器: x86、 arm、 mips
2、交叉編譯的原理
即在一個(gè)平臺(tái)上,模擬其他平臺(tái)的特性
編譯的流程: 源代碼-->編譯-->鏈接-->可執(zhí)行程序
3、交叉編譯的工具鏈
多個(gè)工具的集合,一個(gè)工具使用完后接著調(diào)用下一個(gè)工具
4、常見的交叉編譯工具
NDK(Native Development Kit): 開發(fā)JNI必備工具,就是模擬其他平臺(tái)特性類編譯代碼的工具
CDT(C/C++ Development Tools): 是Eclipse開發(fā)C語(yǔ)言的一個(gè)插件,高亮顯示C語(yǔ)言的語(yǔ)法
Cygwin: 一個(gè)Windows平臺(tái)的Unix模擬器