http://www.docin.com/p-88450636.html
一、前言
Google Android 釋出了 NDK ,引起了很多發人員的興趣。 NDK 全稱: Native Development Kit,官方下載下傳位址:http://androidappdocs.appspot.com/sdk/ndk/index.html
1. NDK是什麼
The Android NDK is a toolset that lets you embed components that make use of native code in your Android applications.
Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts of your applications using native-code languages such as C and C++. This can provide benefits to certain classes of applications, in the form of reuse of existing code and in some cases increased speed.
英語不好的,自己GOOGLE吧。簡而言之,NDK就是一套基于C和C++底層開發API的內建工具元件,使用NDK開發編譯的應用程式同樣可以基于虛拟機Dalvik上“瘋跑”。如果你問為啥推出NDK,敝人以為C和C++開發的應用程式其卓越性能不用提了,至少C和C++被反編譯的可能性降低了很多,要比JAVA安全保密多了。
2. ANDROID NDK 帶來了什麼
a) 一套工具,基于本機編譯的C和C++源代碼庫。
b) 一種部署在ANDROID裝置上,可以将so和java一起打包成APK的方法。
c) A set of native system headers and libraries that will be supported in all future versions of the Android platform, starting from Android 1.5. Applications that use native activities must be run on Android 2.3 or later.(自個了解吧,最好别用GOOGLE,我試過了不是人話。)
d) NDK內建了交叉編譯器,并提供了相應的 mk 檔案隔離 CPU 、平台、 ABI 等差異,開發人員隻需要簡單修改 mk 檔案(指出 “ 哪些檔案需要編譯 ” 、 “ 編譯特性要求 ” 等),就可以建立出 so。(此句出自網絡)
二、“大力神”合體前的準備
1. 內建Cygwin
a) 什麼是cygwin
cygwin是一個在windows平台上運作的unix模拟環境,是cygnus solutions公司開發的自由軟體(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收 購)。它對于學習unix/linux操作環境,或者從unix到windows的應用程式移植,或者進行某些特殊的開發工作, 尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。随着嵌入式系統開發 在國内日漸流行,越來越多的開發者對cygwin産生了興趣。(出自百度百科)
b) 為啥要內建cygwin
相信你該知道可愛的android是基于linux核心的,是以咱們要基于NDK開發,至少得有一個linux的環境吧。當然你可已選擇虛拟機VM,可是如果你是在windows上成長起來的,對Linux的了解程度比我還差的話,那麼相信我,還是選擇cygwin吧,至少你不用來回切換視窗了。
c) Cygwin下載下傳與安裝
下載下傳位址:http://www.cygwin.com。下載下傳後會儲存成setup.exe,輕按兩下開始安裝。線上安裝時首選要選擇鏡像站點,此處考慮到咱公司的網絡現狀,建議選擇台灣的HTTP站點,http://ftp.ntu.edu.tw。如下圖所示
元件安裝有兩種方式可供選擇,一是選擇必須的元件如devel 下的gcc-core,gcc-g++, make和lib下的glib2,glib2-devel,各位注意要版本号對應,盡量選擇最新的版本。具體選擇的如下圖:
上圖中注意左側skip的重新整理圖示,點選後會出現install,而右邊是選擇元件的名稱。(相信智商在90以上的都能看懂。)二是選擇All後面的回旋圖示,這樣無論任何元件都将安裝,其下載下傳量大概能有1.7G左右。(盡管這是比較腦殘的做法,可是目的還是達到了,也不用選擇元件了。因為哥就是這麼幹的!沒錯,那兩天網速慢就是哥幹的。)如下圖所示:
2. 下載下傳Android NDK.
官方下載下傳位址:http://androidappdocs.appspot.com/sdk/ndk/index.html。最好下載下傳V1.5以上。下載下傳後直接解壓即可。鑒于都屬于android 開發,是以最好把其放在android SDK的相同目錄下,這樣尋找Samples的時候會比較省事。
3. Eclipse元件
Android SDK 不用說了,這不是重點。ADT也不說了,單說CDT。CDT是Eclipse開發C++的元件包,可以在Eclipse的菜單欄HELP選項裡選擇Install new software ,然後添加站點http://download.eclipse.org/tools/cdt/releases/galileo,線上安裝。有必要說明一下,使用NDK開發包來開發android,是不需要CDT的。但是你如果安裝了CDT,會在review其他人寫的C++ code時有幫助。
三、大力神正式合體。
1、 確定cygwin v1.71以上安裝無誤後,找到目錄C:/cygwin/etc/defaults/etc/skel下的.bash_profile檔案,用記事本打開,在最後面加入下面這句話
ANDROID_NDK_ROOT=/cygdrive/e/android/android-ndk-r5 (此處表示NDK安裝目錄)
export ANDROID_NDK_ROOT
這句話表示的是添加環境變量,就像windows下添加環境變量。然後注意儲存。再打開桌面圖示Cygwin,在指令行輸入:cd $ ANDROID_NDK_ROOT如下圖所示
注意環境變量的大小寫。回車後會定位至你的NDK安裝目錄,如下圖所示
輸入指令 :ls –a,會顯示目錄下的所有檔案已驗證目錄配置正确。如下圖所示
到此處,如果你沒弄出來,不要緊,别慌,要淡定。聽哥繼續說,請把剛才改寫的.bash_profile檔案拷貝至目錄C:/cygwin/home/admin下,關閉cygwin後并重新啟動cygwin。按照上述步驟再驗證一回。再不好使,那就是人品問題了。
2、 Eclipse下調試samples
有些同志很喜歡上網去找例子,然後拖下來運作。其實這習慣不好,NDK下有現成的例子如samples檔案下的hello-jni。請将NDK下的例子拷貝至wokespace目錄下,我的是E:/VSS/android/android-ndk-r5/samples,先拷貝hello-jni。這個helloworld程式員最熟悉不過了。接下來你按部就班選擇import 後,發現裡面沒有項目連結檔案。别傻,聽哥詳解。要選擇new—>project-->android projectà接下來如下圖所示
輸入項目名稱à選擇從源碼建立àlocation位置要選擇剛才拷貝至workspace下的源碼hello-jni。(注意别跟哥學,哥懶了沒拷貝源碼,直接選擇NDK下的samples)。
3、 工程編譯
http://blog.163.com/[email protected]/blog/static/702347772011027104219448/
工程目錄如下圖所示
到這步,你的工程可能會報錯,不過别慌。請右鍵選擇項目hellojni-->Build path---> config build path--->Builders--->new,如下圖所示
選擇program,配置如下圖:
我的arguments是:--login -c "cd /cygdrive/E/VSS/android/android-ndk-r5/samples/hello-jni && $ANDROID_NDK_ROOT/ndk-build"
注意選擇你自己的真實目錄,别抄我的,不然你死定了。
接着配置Refresh選項
再配置Build Options選項
特别要注意選擇specify resources,因為要編譯C++,是以必須選擇jni目錄的C++ code ,如下圖所示
當以上步驟都正确配置無誤,儲存配置後應該就會自動編譯jni目錄下的C相關代碼并輸出相應的.so庫檔案到工程的libs目錄下,libs目錄會自動建立。
到此全部配置已經結束,歡迎你進入嵌入式開發的初級階段。
轉自 http://blog.163.com/[email protected]/blog/static/702347772011026115958730/