天天看點

ndk 入門執行個體

引用: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、輕按兩下這個檔案,啟動安裝

ndk 入門執行個體

2、下一步

ndk 入門執行個體

3、線上安裝

ndk 入門執行個體

4、選擇安裝路徑

ndk 入門執行個體
ndk 入門執行個體

5、下載下傳檔案緩存路徑

ndk 入門執行個體

6、選擇網絡連接配接方式

ndk 入門執行個體

7、選擇下載下傳鏡像站點,目前有一個最新的鏡像是163.com,大家選擇這個速度快,網易提供的源

ndk 入門執行個體

8、下載下傳安裝

ndk 入門執行個體

9、選擇安裝項

ndk 入門執行個體

10、啟動 Cywin 測試 

ndk 入門執行個體

11、輸入指令測試

ndk 入門執行個體

四、配置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

ndk 入門執行個體

2. 

ndk 入門執行個體

3.

ndk 入門執行個體

4.

ndk 入門執行個體

5.  生成 JNI  頭檔案

下面生成JNI 頭檔案啦,使用 javah 指令,對 JNI..java 這個檔案生成,别搞錯啦!

使用cmd 進入 android 項目的 bin 目錄中,然後執行  javah -classpath .  -jni cc.androidos.jni.JNI 這個指令。别忘記包名!( ^_^)

ndk 入門執行個體

生成了一個cc_androidos_jni_JNI.h

打開看看:(裡面都是c 語言的頭檔案聲明)  

ndk 入門執行個體

 6.書寫C 代碼,寫入資料

ndk 入門執行個體

com_zctya_jni_MyJni.h内容不變

  com_zctya_jni_MyJni.c的内容

ndk 入門執行個體

在這裡的代碼會在運作的時候向sdcard 寫入 12530檔案夾中的bj12530.log檔案中寫入 資料”aaaa“。

7.  編譯SO 檔案

在NDK的主目錄 android-ndk-r6b 下面有個 sources 檔案夾中建立一個名為 myndk 的檔案夾

不知道這裡是為什麼與網上的介紹不太一樣

我這裡需要在 myndk 檔案夾下面再建立一個名為 jni 的檔案夾,檔案夾中有如下三個檔案

ndk 入門執行個體

這裡的Android.mk檔案中的内容如下

ndk 入門執行個體
ndk 入門執行個體

執行過程中

ndk 入門執行個體

執行後,結果如 

ndk 入門執行個體

8、把生成的so庫,放到Android 工程下面

ndk 入門執行個體

把 libs 檔案夾,複制到 android中MyNDK工程的主目錄

9、啟動模拟器測試:注明這裡的12530檔案夾和bj12530.log檔案是原來建立好的

這裡還有個疑問為什麼别人用 make APP=××× -B 之類的就可以通過,而我就不行呢,郁悶中...,還望知者賜教

[  make APP=××× -B 是NDK1.4之前的版本  ]

附相關源碼:

ndk 入門執行個體

http://u.115.com/file/bhixb5c3 NDK_demo.rar

上一篇: Java筆記目錄
下一篇: java目錄結構

繼續閱讀