Android NDK是一套容許開發人員使用本地代碼(如C/C++)進行Android APP功能開發的工具,經過這個工具,咱們能夠把用C/C++代碼編譯成能夠直接運行在Android平臺上的本地代碼,這些本地代碼以動態連接庫( *.so )的形式存在,也正由於這樣,咱們能夠經過複用這些動態連接庫從而複用本地代碼。php
那麼,經過NDK這個開發工具包,那麼咱們是否能夠將一個APK徹底使用C/C++來編寫呢?html
答案是不能夠的。衆所周知,Android應用程序是運行在Dalvik虛擬機上的。而NDK只開發了部分接口,因此NDK只是容許開發人員經過C/C++實現Android APP的部分功能。因爲Android系統自己就是Linux核心,NDK只是負責把這些本地代碼編寫成能夠運行在linux上的動態連接庫,從而繞過了Dalvik虛擬機,直接運行在Android平臺上了。linux
下載地址: http://developer.android.com/tools/sdk/ndk/index.html#Downloads android
截至2013-12-9爲止,也就是我寫這篇博客的時候,最新版本爲:r9windows
在同一個平臺中,下載包有兩個,咱們選擇下載android-ndk-r9b-windows-x86eclipse
NDK支持三大平臺(windows, Mac, Linux),下面我以windows做爲例子進行講解一下下載項中的Package的區別,如圖:編輯器
從圖中,咱們能夠看到,每一個平臺,都有兩個相應的下載包,分別是android-ndk-r9b-windows-x86.zip和android-ndk-r9b-windows-x86-legacy-toolchains.zip,那麼這兩個包有什麼區別呢?工具
官網的解釋是這樣子的:第一個下載包,也就是圖中的android-ndk-r9b-windows-x86.zip,包含了全部平臺默認的工具鏈,若是你不想使用當前默認推薦的工具鏈,那麼能夠下載第二個。可能直接這麼說會有點空,下面一塊兒看下下面這張圖:學習
從圖中咱們知道了legacy包只有一個工具鏈包,而非legacy包中含有各類默認的已經制定好的工具,同時包含有例子,文檔等等。開發工具
1) 直接把下載到的安裝包解壓到你想要放的路徑;
2) 配置環境變量
I. 新建一個系統環境變量,變量名爲ANDROID_NDK_ROOT, 變量值爲你的NDK所在的路徑,好比個人就是 D:\DevTools\JAVA\adt-bundle-windows\android-ndk-r9b
II. 在系統變量 Path 的最前面添加 %ANDROID_NDK_ROOT%\;
完成上面的步驟以後,NDK的安裝到此就完成了,下面咱們來驗證一下NDK安裝成功與否.
1) 打開cmd.exe,在裏面輸入ndk-build -version,輸出如下內容,表示安裝成功。
根據官方文檔的說明,從 r7 版本以後,NDK中就多出了一個 ndk-build.cmd,讓咱們能夠直接在windows下運行啦,若是沒有特別需求的話,咱們不再用花費一大堆時間去下載安裝Cygwin啦……固然有須要的也能夠看下下一篇博文《Android學習——windows下搭建Cygwin環境》
下面咱們以官方給的Project hello-jni 做爲例子來說解吧。
1) 進入到 hello-jni 目錄下或者它的任意父目錄,當前我就直接進入到 hello-jni 目錄下吧;
2) 直接輸入命令 ndk-build 進行本地代碼編譯,輸出如下內容,表示成功編譯成動態連接庫,同時咱們在hello-jni\obj\local\armeabi路徑下能夠看到編譯好的libhello-jni.so;
編譯成功後,咱們來嘗試一下,看看剛纔編譯成功的動態連接庫是否可以使用。
1) 執行前面博文中咱們講解過的adb update project命令升級該項目,爲該項目添加上build.xml等文件,不懂的能夠直接查看前面的博文《Android學習次日-android經常使用命令》,下面我直接在機子上執行如下命令:
android update project -p . -t 1
輸出如下結果表示Update成功。
2) 直接執行命令 ant debug 進行編譯打包成apk(這裏須要預先搭建好ANT的環境,若是沒有搭建的話能夠參考博文:http://my.oschina.net/xiahuawuyu/blog/71296)
3) 開啓模擬器
4) 直接執行命令安裝bin目錄下的APK到模擬器中 adb install HelloJni-debug.apk 如下是執行結果:
CDT是C/C++在Eclipse平臺下的開發工具.它提供的功能包括:C/C++編輯器(一些基本的功能:語法高亮顯示,代碼編輯等),C/C++調試器,C/C++ Launcher,剖析器,內容提示,Makefile生成器等。
若是你們下載的是谷歌提供的ADT 綁定版,那麼它已經默認安裝好了相應的CDT了,能夠忽略該章不閱讀,具體咱們還能夠經過 Help-> About ADT 進行查看相關信息,如圖:
下載地址: http://www.eclipse.org/cdt/downloads.php
該地址上下載的是離線安裝包,因爲安裝包比較大,因此也建議採起這種方式。
注意:不一樣eclipse版本要下載對應的包,不然安裝不了
那麼咱們應該怎麼知道咱們的eclipse版本呢?
一樣經過Help -> About Eclipse 打開相關信息,如圖:
從圖中,咱們能夠知道本身的Eclipse版本,好比個人是Indigo,而後就到下載地址上根據版本下載相應的便可,好比我下載的是就是 cdt-master-8.0.2.zip
1) 經過 Help -> Install New Software打開一個對話框,點擊按鈕 add。
2) 在彈出來的對話框中,建議給Name的值爲:CDT_版本號;而後點擊Archive按鈕,定位到咱們下載到的CDT離線安裝包
3) 等待安裝完成後,重啓eclipse後生效
4) 安裝完成重啓後,在Eclispe中新建一個項目,若是出現了C/C++項目,則代表CDT插件安裝成功了
1) 若是Location的下面出現「Duplicate location」錯誤,請到Window -> preferences -> Install/Update -> Avaliable Software Site中找到remove掉。
2) 若是出現缺乏eclipse包說明你下載的版本和eclipse版本不匹配,從新下載匹配的從新安裝就能夠了。
Sequoyah插件用於設置Android工程對Native開發的支持,若是安裝的是ADT 綁定版的同窗,能夠直接閱讀 章節2.2.4 NDK的配置
下載地址:http://www.eclipse.org/sequoyah/downloads/index.php#latest
咱們能夠從上面的地址中下載離線安裝包,具體的安裝方法跟上文中的CDT離線安裝方法相同,再次不作重複說明。
因爲Sequoyah自己並非太大,在線安裝速度也比較快,因此建議在線安裝,下面咱們來講明一下在線安裝的方法
1) 經過 Help -> Install New Software打開一個對話框,點擊按鈕 add,具體不截圖啦,跟CDT中安裝的第一步同樣。
2) 在彈出的窗口中,Name 輸入Sequoyah,Location直接輸入http://download.eclipse.org/sequoyah/updates/2.0/ ,如圖:
注意:在安裝界面不要勾選「Group items by category」複選框,默認是勾選的,出現了列表爲空(There are no categorized items)的狀況,如圖:
咱們以NDK中給出的例子hello-gl2爲例子進行講解:
1) 經過Preference -> Android -> NDK ,點擊Browser按鈕,定位到咱們NDK安裝的根目錄,如圖:
這部分的內容因爲篇幅較長,因此另起了一篇博文進行描寫《Android學習——windows下搭建Cygwin環境》
1) 首先咱們應該導入項目,右鍵,選擇Import
2) 因爲例子不是一個Eclipse項目,因此咱們必須如圖中那般選擇 ,讓Eclipse根據已有的安卓代碼進行項目構建, 點擊Next
3) 定位到咱們要導入的項目,而且勾上覆制到工做空間中,讓例子中搞的代碼保持原來的樣子做爲備份,而咱們操做的是復 制到工做區間中的代碼。
4) 對咱們引入的項目右鍵,選擇Android Tools -> Add Native Support
5) 由於demo中已經爲咱們寫好了cpp文件,因此直接跟他同樣名字,點擊肯定。
6) 如圖,點擊右上角的按鈕進入Perspective C/C++
若是找不到改按鈕,咱們還能夠經過Windows -> Open Perspective -> Other... ,選擇C/C++ 便可打開
7) 點擊工具欄中的錘子按鈕進行編譯
8) 等待控制檯輸出如下內容,說明動態連接庫已經編譯完成了,同時咱們還可以在obj\local\armeabi看到編譯好了的動態連接庫。
9) 注意:改項目想要直接運行的話會出錯,具體解決方法能夠參考:http://hi.baidu.com/huareal/item/f00ad3cf8d35ebd7ee183b83 ,根據該文章修改後,咱們發現就能夠正常運行了,這也說明了咱們在Eclipse中的NDK相關設置配置成功了