JNI 是 Java 語言提供的 Java 和 C/C++ 相互溝通的機制,Java 可以通過 JNI 調用本地的 C/C++ 代碼,本地的 C/C++ 的代碼也可以調用 Java 代碼。JNI 是本地編程接口,Java 和 C/C++ 互相通過的接口。Java 通過 C/C++ 使用本地的代碼的一個關鍵性原因在于 C/C++ 代碼的高效性。 代碼和其他語言寫的代碼進行交互。
NDK 是一系列工具的集合。它提供了一系列的工具,幫助開發(fā)者快速開發(fā) C(或C++)的動態(tài)庫,并能自動將 so 和 Java 應用一起打包成 apk。這些工具對開發(fā)者的幫助是巨大的。它集成了交叉編譯器,并提供了相應的 mk 文件隔離 CPU、平臺、ABI 等差異,開發(fā)人員只需要簡單修改 mk 文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出 so。它可以自動地將 so 和 Java 應用一起打包,極大地減輕了開發(fā)人員的打包工作。
本指南首先會講 JNI 開發(fā)的一些基礎知識,每個知識點都會結合一個案例來貫通,最后講 NDK 開發(fā),NDK 這塊主要講編譯環(huán)境的配置、Android.mk 的編寫,通過示例代碼,讓讀者了解 JNI 技術的原理,幫助開發(fā)者搭建 NDK 開發(fā)環(huán)境。