天天看點

android JNI的.so庫調用

在一篇部落格中看到一篇文章,感覺描述的還可以:

為了更加形象的介紹jni,先觀察下面的圖檔,下圖表示的是整個android系統架構

android JNI的.so庫調用

圖中從上到下的結構依次是:

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

android JNI的.so庫調用

開發jni需要準備的工具:

<a target="_blank" href="http://blog.csdn.net/DJY1992/article/details/51364430"></a>

下載下傳完成後将ndk解壓的一個任意的目錄下,我解壓在 D:\develop

建議檔案目錄不要帶空格,解壓後将ndk所在的路徑添加到環境變量中

android JNI的.so庫調用

打開android ndk後,可以看到android ndk的目錄結構如下:

android JNI的.so庫調用

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檔案夾

android JNI的.so庫調用

第四步:在jni檔案夾下建立一個hello.c檔案,并在hello.c檔案中添加下面的代碼 

第五步:在jni檔案夾下建立一個Android.mk檔案,并在Android.mk中添加下面的代碼 

第六步:編譯android ndk程式

1、打開指令行,并且進入到jni所在的目錄

android JNI的.so庫調用

2、輸入ndk-build.cml指令編譯android ndk

android JNI的.so庫調用

3、看到下圖所示的提示表示android ndk編譯成功

android JNI的.so庫調用

4、此時打開libs檔案夾下的armeabi檔案夾,可以看到armeabi檔案夾下生成了一個libhello.so檔案

      這個就是Android ndk編譯後生成的檔案,在後面就可以直接使用libhello.so檔案

android JNI的.so庫調用

最後一步:使用通過ndk編譯好的,修改MainActivity.java檔案

android JNI的.so庫調用