引用: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 官網下載下傳就好了,現在不用FQ了。
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
其中前一句需要修改為你自己的路徑,儲存後,重新啟動 Cygwin 。 注意:這裡如果是中文 OS 使用記事本或者寫字闆打開編輯後,重新啟動 Cygwin 會報錯。
五、編譯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
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
此時.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 語言的頭檔案聲明)
6.書寫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之前的版本 ]
附相關源碼:
http://u.115.com/file/bhixb5c3 NDK_demo.rar