https://blog.csdn.net/carson_ho/article/details/73250163
JNI
- 定義:Java Native Interface,即 Java本地接口
- 作用: 使得Java 與 本地其他類型語言(如C、C++)交互
- 背景:實際使用中,Java 需要與 本地代碼 進行交互
- 問題:因爲 Java 具備跨平臺的特點,所以Java 與 本地代碼交互的能力非常弱
- 解決方案: 採用 JNI特性 增強 Java 與 本地代碼交互的能力
實現步驟
- 在Java中聲明Native方法(即需要調用的本地方法)
- 編譯上述 Java源文件javac(得到 .class文件)
- 通過 javah 命令導出JNI的頭文件(.h文件)
- 使用 Java需要交互的本地代碼.
- 實現在 Java中聲明的Native方法 如 Java 需要與 C++ 交互,那麼就用C++實現 Java的Native方法
- 編譯.so庫文件
- 通過Java命令執行 Java程序,最終實現Java調用本地代碼
NDK
- 定義:Native Development Kit,是 Android的一個工具開發包 NDK是屬於 Android 的,與Java並無直接關係
- 作用:快速開發C、 C++的動態庫,並自動將so和應用一起打包成 APK 即可通過 NDK在 Android中 使用 JNI與本地代碼(如C、C++)交互
- 應用場景:在Android的場景下 使用JNI 即 Android開發的功能需要本地代碼(C/C++)實現
- 特點
- 額外注意
使用步驟
- 配置 Android NDK環境
- 創建 Android 項目,並與 NDK進行關聯
- 在 Android 項目中聲明所需要調用的 Native方法
- 使用 Android需要交互的本地代碼 實現在Android中聲明的Native方法 比如 Android 需要與 C++ 交互,那麼就用C++ 實現 Java的Native方法
- 通過 ndk - bulid 命令編譯產生.so庫文件
- 編譯 Android Studio 工程,從而實現 Android 調用本地代碼