文章摘自:http://zctya.blog.163.com/blog/static/1209178201181074018603/
目標:
利用NDK 生成 SO 庫,使用 SO 庫進行 JNI 調用,在 Android sdcard 創建文件並寫入數據。
工具:NDK 1.6 、Eclipse for java 、android SDK 、Cygwin
一、下載 Cywin
從Cywin官網 http://www.cygwin.com/ 下載所需要的版本,這裏僅介紹在Windows下使用 Cywin
二、下載 NDK
這個直接從Android 官網下載就好了,現在不用翻牆了。
www.android.com
三、安裝 Cywin 參考 【eoe特刊】第七期:NDK.pdf 大家可以去看這個PDF
下載到的Cywin 的程序文件爲 setup.exe 文件
1、雙擊這個文件,啓動安裝
2、下一步
3、在線安裝
4、選擇安裝路徑
5、下載文件緩存路徑
6、選擇網絡連接方式
7、選擇下載鏡像站點,目前有一個最新的鏡像是163.com,大家選擇這個速度快,網易提供的源
8、下載安裝
9、選擇安裝項
10、啓動 Cywin 測試
11、 輸入命令測試
四、配置Cywin
先找到安裝路徑下的 .bash_profile 文件,
我的環境位於:
2.修改 /home/$your computer's login name$/.bash_profile 在其中添加下面兩句
# 這個裏面的f/Android/android-ndk-r6b是存放NDK的目錄,我的是F盤下Android文件夾中的android-ndk-r6b文件夾就是NDK的目錄 ANDROID_NDK_ROOT=/cygdrive/f/Android/android-ndk-r6b # 你懂的 export ANDROID_NDK_ROOT |
五、編譯NDK實例( hello-jni),測試一下
我們使用NDK自帶的一個例子來生成.so文件
生成 .so 的步驟 ①、在Cywin中,首先跳轉到NDK實例目錄下面,
cd /cygdrive/f/Android/android-ndk-r6b//samples/hello-jni/ |
$ANDROID_NDK_ROOT/ndk-build |
# $ANDROID_NDK_ROOT/ndk-build Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver Gdbsetup : libs/armeabi/gdb.setup Gdbsetup : libs/armeabi/gdb.setup SharedLibrary : libhello-jni.so Install : libhello-jni.so => libs/armeabi/libhello-jni.so |
六、現在我們來寫一個自己的程序來試一下.so,本人使用1.6以上版本
1.用Eclipse 創建一個Android程序,MyNDK
2.
3.
4.
5. 生成 JNI 頭文件
下面生成JNI 頭文件啦,使用 javah 命令,對 JNI..java 這個文件生成,別搞錯啦!
使用cmd 進入 android 項目的 bin 目錄中,然後執行 javah -classpath . -jni cc.androidos.jni.JNI 這個命令。別忘記包名!( ^_^)
生成了一個cc_androidos_jni_JNI.h
打開看看:(裏面都是c 語言的頭文件聲明)
com_zctya_jni_MyJni.h內容不變
com_zctya_jni_MyJni.c的內容
在這裏的代碼會在運行的時候向sdcard 寫入 12530文件夾中的bj12530.log文件中寫入 數據”aaaa“。
7. 編譯SO 文件
在NDK的主目錄 android-ndk-r6b 下面有個 sources 文件夾中創建一個名爲 myndk 的文件夾
不知道這裏是爲什麼與網上的介紹不太一樣
我這裏需要在 myndk 文件夾下面再創建一個名爲 jni 的文件夾,文件夾中有如下三個文件
這裏的Android.mk文件中的內容如下
執行過程中
執行後,結果如
8、把生成的so庫,放到Android 工程下面
把 libs 文件夾,複製到 android中MyNDK工程的主目錄
9、啓動模擬器測試:註明這裏的12530文件夾和bj12530.log文件是原來創建好的
這裏還有個疑問爲什麼別人用 make APP=×××
-B 之類的就可以通過,而我就不行呢,鬱悶中...,還望知者賜教
[ make APP=××× -B 是NDK1.4之前的版本 ]