參考文檔:
http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html
http://blog.csdn.net/cboy017/article/details/8455629
為何要用到NDK?
我們正常的android應用開發是用不到NDK的開發的,SDK開發就夠了,正常開發環境也就eclipse+sdk+adt就OK了。
但是,如果遇到一些移植的C/C++功能模組的時候,NDK的開發就顯得尤為便捷。
概括來說主要分為以下幾種情況:
1. 代碼的保護,由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。
2. 在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的。
3. 便於移植,用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。
到首頁下載NDK
http://developer.android.com/tools/sdk/ndk/index.html
我們從安裝說明中也可以看到需要安裝cywin1.7以上的是為了c/c++代碼的交叉編譯
http://www.cygwin.com/
下載NDK後,在eclipse->preferences->android->ndk中選擇正確的路徑
安裝cywin
編譯NDK,在預設設定下,只需選擇Devel(點擊列表中Devel,將後面的Default改為Install,圖中箭頭所示)其它均為預設狀態。
(其實NDK需要的不多,主要autoconf2.1、automake1.10、binutils、gcc-core、gcc- , g++、gcc4-core、
gcc4-g++、gdb、pcre、pcre-devel、gawk、make )
下載完成時間決定於你選擇的安裝包數量及網路連接速度。
配置cygwin
在命令列中進入cygwin目錄,並執行cygwin.bat,如果你不是用Administrator帳號登入的系統,那麼會在cygwin 安裝目錄 \home\
檔案夾中產生一個以你的登入名稱命名的新的檔案夾。
修改新組建檔案夾中的“.bash_profile ”檔案,用UE或editplus等文字編輯器開啟,
在最後增加: (d/android-ndk-r8是安裝ndk的路徑)
NDK_ROOT=/cygdrive/d/eclipse/android-ndk-r8e
export NDK_ROOT
然後儲存關閉。
好的到目前為止ndk的編譯環境是安裝搭建完畢了。
我們現在來匯入ndk sample中的jni工程
cygwin還沒有派上用場,現在就利用它來編譯c++,在項目上點擊 右鍵,在工程的屬性 builders中new 一個編譯規則:
按照下面的設定
Location:D:\cygwin\bin\bash.exe
Working Directory:D:\cygwin\bin
Arguments:--login -c "cd /cygdrive/d/eclipse/android-ndk-r8e/samples/hello-jni&&$NDK_ROOT/ndk-build"
然後在Build Options進行設定
最後然後將NDK_Builder移到最上面
最後編譯工程,編譯成功後顯示成功產生了*.so庫檔案,運行OK
可能有同學隊這個JNI工程有疑問,按個JNI中的標頭檔是如何而來的,或者我重建立一個NDK工程師如何開始的,請見該部落格:
http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html