標籤:android style blog java ext width
1. NDK(Native Development Kit)
1.1 NDK簡介
Android NDK是一套允許開發人員使用本地代碼(如C/C++)進行Android APP功能開發的工具,通過這個工具,我們可以把用C/C++代碼編譯成可以直接運行在Android平台上的本地代碼,這些本地代碼以動態連結程式庫( *.so )的形式存在,也正因為這樣,我們可以通過複用這些動態連結程式庫從而複用本地代碼。
那麼,通過NDK這個開發套件,那麼我們是否可以將一個APK完全使用C/C++來編寫呢?
答案是不可以的。眾所周知,Android應用程式是運行在Dalvik虛擬機器上的。而NDK只開發了部分介面,所以NDK只是允許開發人員通過C/C++實現Android APP的部分功能。由於Android系統本身就是Linux核心,NDK只是負責把這些本地代碼編寫成可以運行在linux上的動態連結程式庫,從而繞過了Dalvik虛擬機器,直接運行在Android平台上了。
1.2 NDK下載
1.2.1 下載說明
:http://www.cr173.com/soft/66623.html
http://developer.android.com/tools/sdk/ndk/index.html#Downloads
截至2013-12-9為止,也就是我寫這篇部落格的時候,最新版本為:r9
在同一個平台中,下載包有兩個,我們選擇下載android-ndk-r9b-windows-x86
1.2.2 下載項區別
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.3 NDK安裝說明
1) 直接把下載到的安裝包解壓到你想要放的路徑;
2) 配置環境變數
I. 建立一個系統內容變數,變數名為ANDROID_NDK_ROOT, 變數值為你的NDK所在的路徑,比如我的就是D:\DevTools\JAVA\adt-bundle-windows\android-ndk-r9b
II. 在系統變數 Path 的最前面添加%ANDROID_NDK_ROOT%\;
1.4 NDK 安裝驗證
完成上面的步驟之後,NDK的安裝到此就完成了,下面我們來驗證一下NDK安裝成功與否.
1) 開啟cmd.exe,在裡面輸入ndk-build -version,輸出以下內容,表示安裝成功。
1.5 NDK 的使用說明
根據官方文檔的說明,從 r7 版本之後,NDK中就多出了一個 ndk-build.cmd,讓我們可以直接在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以下是執行結果:
2. Eclipse中使用NDK
2.1 Eclipse CDT (C/C++ Development Tooling)
2.1.1 CDT介紹
CDT是C/C++在Eclipse平台下的開發工具.它提供的功能包括:C/C++編輯器(一些基本的功能:文法高亮顯示,代碼編輯等),C/C++調試器,C/C++ Launcher,剖析器,內容提示,Makefile產生器等。
2.1.2 CDT 下載與安裝
2.1.2.1 CDT 安裝前說明
如果大家下載的是Google提供的ADT 綁定版,那麼它已經預設安裝好了相應的CDT了,可以忽略該章不閱讀,具體我們還可以通過 Help-> About ADT 進行查看相關資訊,
2.1.2.2 CDT 下載
:http://www.eclipse.org/cdt/downloads.php
該地址上下載的是離線安裝包,由於安裝包比較大,所以也建議採取這種方式。
注意:不同eclipse版本要下載對應的包,否則安裝不了
那麼我們應該怎麼知道我們的eclipse版本呢?
同樣通過Help -> About Eclipse 開啟相關資訊,
,我們可以知道自己的Eclipse版本,比如我的是Indigo,然後就到上根據版本下載相應的即可,比如我下載的是就是 cdt-master-8.0.2.zip
2.1.2.3 CDT 安裝
1) 通過 Help -> Install New Software開啟一個對話方塊,點擊按鈕 add。
2) 在彈出來的對話方塊中,建議給Name的值為:CDT_版本號碼;然後點擊Archive按鈕,定位到我們下載到的CDT離線安裝包
3) 等待安裝完成後,重啟eclipse後生效
4) 安裝完成重啟後,在Eclispe中建立一個項目,如果出現了C/C++項目,則表明CDT外掛程式安裝成功了
2.1.2.4 CDT 安裝問題解決
1) 如果Location的下面出現“Duplicate location”錯誤,請到Window -> preferences -> Install/Update -> Avaliable Software Site中找到remove掉。
2) 如果出現缺少eclipse包說明你下載的版本和eclipse版本不匹配,重新下載匹配的重新安裝就可以了。
2.2 Sequoyah
2.2.1 Sequpyah 簡介
Sequoyah外掛程式用於設定Android工程對Native開發的支援,如果安裝的是ADT 綁定版的同學,可以直接閱讀 章節2.2.4 NDK的配置
2.2.2 Sequoyah 下載
:http://www.eclipse.org/sequoyah/downloads/index.php#latest
我們可以從上面的地址中下載離線安裝包,具體的安裝方法跟上文中的CDT離線安裝方法相同,再次不做重複說明。
2.2.3 Sequoyah 線上安裝
由於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)的情況,
2.2.4 NDK的配置
我們以NDK中給出的例子hello-gl2為例子進行講解:
1) 通過Preference -> Android -> NDK ,點擊Browser按鈕,定位到我們NDK安裝的根目錄,
2.3 Eclipse中NDK使用說明
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相關設定配置成功了