NDK入門實例,生成.so文件

文章摘自: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、雙擊這個文件,啓動安裝
NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog
2、下一步

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
3、在線安裝

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
4、選擇安裝路徑

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog
 
5、下載文件緩存路徑

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
6、選擇網絡連接方式

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
7、選擇下載鏡像站點,目前有一個最新的鏡像是163.com,大家選擇這個速度快,網易提供的源

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
8、下載安裝
NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog
 
9、選擇安裝項

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
10、啓動 Cywin 測試 

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
11、 輸入命令測試

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
四、配置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
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入門實例,生成.so文件 - 心海飄雲 - zctyas blog 


2. 

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
3.

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog  
4.

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
5 生成 JNI  頭文件

下面生成JNI 頭文件啦,使用 javah 命令,對 JNI..java 這個文件生成,別搞錯啦!

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


NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
生成了一個cc_androidos_jni_JNI.h

打開看看:(裏面都是c 語言的頭文件聲明)  
NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog

 6.書寫C 代碼,寫入數據

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
com_zctya_jni_MyJni
.h內容不變
  com_zctya_jni_MyJni.c的內容

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 


在這裏的代碼會在運行的時候向sdcard 寫入 12530文件夾中的bj12530.log文件中寫入 數據”
aaaa“。
7.  編譯SO 文件

在NDK的主目錄 android-ndk-r6b 下面有個 sources 文件夾中創建一個名爲 myndk 的文件夾
不知道這裏是爲什麼與網上的介紹不太一樣

我這裏需要在 myndk 文件夾下面再創建一個名爲 jni 的文件夾,文件夾中有如下三個文件

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 

這裏的Android.mk文件中的內容如下

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog
 
執行過程中
NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 
執行後,結果如 

NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog 

8、把生成的so庫,放到Android 工程下面
NDK入門實例,生成.so文件 - 心海飄雲 - zctyas blog

  
把 libs 文件夾,複製到 android中MyNDK工程的主目錄

9、啓動模擬器測試:註明這裏的12530文件夾和bj12530.log文件是原來創建好的

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章