目前正在學習JNI,從一開始的一無所知,到如今的略知一二,走了很多彎路,爲了讓有興趣的同行少走彎路,下面把個人經驗記錄下來,給你們一個參考: 一、先從SimpleJNI提及: 在Android SDK的源碼目錄下./development/samples/SimpleJNI能夠找到一個最簡單的JNI例子,其文件樹以下
該例子的主要思想是用JNI生成一個本地庫libsimplejni.so,實現一個add(a,b)功能,而後經過SimpleJNI.java調用該庫輸出顯示信息 此例子的Android.mk文件以下:
在Android SDK的根目錄下面運行終端,輸入以下編譯命令:
將獲得以下兩個文件:
JNI代碼的目錄爲jni/vative.cpp,其內容以下:
編譯此JNI代碼所須要的Android.mk以下:
應用部分的代碼目錄爲/src/com/example/android/simplejni/SimpleJNI.java,在這個類中Native類是對本地方法的封裝,內容以下:
在這個類中調用的過程以下:
一般JNI的使用自下而上有4個層次:本地庫、JNI庫、聲明本地接口的Java類,Java調用者。在本例中,本地庫和JNI庫合二爲一,聲明本地接口的Java類和Java調用者合二爲一。 二、將以上所獲得的libsimplejni.so與SimpleJNI.apk兩個文件從Ubuntu中拷貝出來,放置在windows C盤的根目錄下, 運行Android模擬器 在windows的「運行」中輸入cmd打開windows的命令窗口 輸入cd c:\命令切換到C盤根目錄下 而後輸入adb version確實系統是否已經安裝了adb工具,若是已經安裝將獲得以下內容 Android Debug Bridge version 1.0.26 若是沒有安裝,能夠到\android-sdk-windows\tools目錄下將adb.exe和AdbWinApi.dll兩個文件拷貝到windows C盤的system32目錄下便可 而後輸入以下命令將libsamplejni.so拷貝到模擬器的system/lib目錄下
再輸入以下命令把SampleJNI.apk拷貝到模擬器的system/app目錄下
上面可能遇到的問題解決辦法: (1)、提示failed to copy 'libsimplejni.so'to'/system/lib/libsimplejni.so':Read-only file system 這是由於當前狀態下,此目錄是一個只讀目錄,輸入以下命令就能夠得到寫的權限
(2)、提示failed to copy 'libsimplejni.so'to'/system/lib/libsimplejni.so':Out of memory 這是由於建議模擬器的時候默認的系統memory過小了,關閉當前模擬器,輸入以下命令就能夠解決此問題
說明:其中Android2.2是我當前所建AVD的名稱,128表明的是設置的系統memory的大小,輸入此命令以後將會自動打開模擬器 一切正常後,輸入相應命令後將獲得:
在模擬器中,咱們將看到已經安裝好了的Simple JNI運行它以後 將獲得咱們所指望的結果 2+3=5 |