做者:十歲的小男孩java
QQ:929994365android
心之安處便是吾鄉c++
前言ide
本文試圖經過解答如下三個問題來達到學習JNI和NDK的目的。是什麼?有什麼用?怎麼用?文章內容前三節來自下面第一個連接的博主共享,很詳細的解答前兩個問題,第二個連接是安卓官網的教程,回到了第三個問題即在實際工程中怎麼用。第三個連接是極客學院的資料。本文記錄本人閱讀與開發過程,力求不失原意,但推薦閱讀原文。下一篇博文將重點學習native聲明的方法在底層c/c++中具體實現。工具
http://www.javashuo.com/article/p-slffgxgu-gc.html學習
https://developer.android.google.cn/studio/projects/add-native-codeui
http://wiki.jikexueyuan.com/project/jni-ndk-developer-guide/google
目錄spa
Java Native Interface
,即 Java
本地接口做用: 使得Java
與 本地其餘類型語言(如C、C++
)交互.net
即在
Java
代碼 裏調用C、C++
等語言的代碼 或C、C++
代碼調用Java
代碼
特別注意:
JNI
是 Java
調用 Native
語言的一種特性JNI
是屬於 Java
的,與 Android
無直接關係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
調用本地代碼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
調用本地代碼本節內容的學習是經過閱讀安卓官網的教程,本文暫且不贅述,讀者自行到官網學習,如下連接:https://developer.android.google.cn/studio/projects/add-native-code