淺學JNI和NDK
阿新 • • 發佈:2018-09-28
介紹 c++ google 什麽 為什麽 文章內容 特點 文件 view
作者:十歲的小男孩
QQ:929994365
心之安處即是吾鄉
前言
本文試圖通過解答以下三個問題來達到學習JNI和NDK的目的。是什麽?有什麽用?怎麽用?文章內容前三節來自下面第一個鏈接的博主共享,很詳細的解答前兩個問題,第二個鏈接是安卓官網的教程,回到了第三個問題即在實際工程中怎麽用。本文記錄本人閱讀與開發過程,力求不失原意,但推薦閱讀原文。下一篇博文將重點學習native聲明的方法在底層c/c++中具體實現。
https://blog.csdn.net/carson_ho/article/details/73250163
https://developer.android.google.cn/studio/projects/add-native-code
目錄
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. 怎麽用?
本節內容的學習是通過閱讀安卓官網的教程,本文暫且不贅述,讀者自行到官網學習,以下鏈接:https://developer.android.google.cn/studio/projects/add-native-code
淺學JNI和NDK