在一篇部落格中看到一篇文章,感覺描述的還可以:
為了更加形象的介紹jni,先觀察下面的圖檔,下圖表示的是整個android系統架構
圖中從上到下的結構依次是:
Application:表示應用層,其實就是指android手機上的應用
Application Framework:表示應用架構層,我們平時用java開發app就是使用應用架構層提供的API做開發
Libraries:android類庫,使用C/C++開發的android類庫
Android Runtime:android運作環境
Linux Kernel:Linux核心
通過上圖可知Android系統分為五個部分,分别是Application(應用層)、Application Framework(應用架構)、Librarise(Android 類庫)、Android Runtime(Android 運作環境)、Linux Kernel(Linux核心),且android應用架構使用java開發的,android類庫使用c/c++開發的,為了使得java開發應用架構能調用c/c++開發的android類庫,android中引入了一個jni,通過jni可以實作java調用c/c++,c/c++調用java
開發jni需要準備的工具:
<a target="_blank" href="http://blog.csdn.net/DJY1992/article/details/51364430"></a>
下載下傳完成後将ndk解壓的一個任意的目錄下,我解壓在 D:\develop
建議檔案目錄不要帶空格,解壓後将ndk所在的路徑添加到環境變量中
打開android ndk後,可以看到android ndk的目錄結構如下:
android ndk目錄結構介紹:
docs:幫助文檔
build/tools:linux的批處理檔案
platforms:編譯c代碼需要使用的頭檔案和類庫
prebuilt:預編譯使用的二進制可執行檔案
sample:jni的使用例子
source:ndk的源碼
toolchains:工具鍊
ndk-build.cmd:編譯打包c代碼的一個指令
使用ndk實作一個簡單的Hello World程式
第一步:使用eclipse建立一個Android工程,并且将工程的名稱命名為HelloJni
第二步:修改activity_main.xml檔案,在布局上添加一個按鈕點選按鈕後調用c語言寫的代碼
第三步:在建立好的android工程下建立一個jni檔案夾
第四步:在jni檔案夾下建立一個hello.c檔案,并在hello.c檔案中添加下面的代碼
第五步:在jni檔案夾下建立一個Android.mk檔案,并在Android.mk中添加下面的代碼
第六步:編譯android ndk程式
1、打開指令行,并且進入到jni所在的目錄
2、輸入ndk-build.cml指令編譯android ndk
3、看到下圖所示的提示表示android ndk編譯成功
4、此時打開libs檔案夾下的armeabi檔案夾,可以看到armeabi檔案夾下生成了一個libhello.so檔案
這個就是Android ndk編譯後生成的檔案,在後面就可以直接使用libhello.so檔案
最後一步:使用通過ndk編譯好的,修改MainActivity.java檔案