轉載請注明出處:http://blog.csdn.net/allen315410/article/details/41800955
Android下的NDK開發是Android開發中不可或缺的一部分,通過Google提供的NDK套件,我們可以使用JNI這座橋梁在Java和C/C++之間建立聯系(互相調用)。那麼,為什麼在Android開發中需要了解NDK開發呢?誠然,這些原因有很多說法,在我總結來是這樣的。C/C++是比Java還要古老的程式設計語言,由于其古老的特性,導緻早期有很多優秀的類庫出現,譬如處理視訊編解碼的FFMPEG類庫,這些複雜的類庫早就被C/C++編寫過,我們在處理視訊編解碼的時候沒必要重複“造輪子”,是以能直接拿來用的就直接拿來用,但是這個直接法很難做到,因為Java的編譯環境的原理跟C/C++的不同,是以就必須找個中間者為Java和C/C++代碼建立關系,這個中間者就是JNI。還有一個重要的原因就是效率問題,Java是跨平台的語言,在不同的平台有不同的JVM實作,Java源碼需要首先編譯成.class檔案,然後讓.class檔案運作在不同的JVM解釋執行上,這樣的步驟造成了效率的浪費,而不同的是C/C++,可以直接編譯成特定平台的二進制檔案,直接運作在特定平台上,效率比Java高效很多,是以在某些特定的環境下,還是需要使用C/C++來解決效率問題,Java隻負責處理C/C++傳回來的結果就可以,這樣的話Java和C/C++互調就顯得相當重要了。
做NDK開發前最好需要了解一下C/C++的文法,通常這部分的代碼不需要Android程式員編寫,但是Android程式員最好能看懂C/C++源碼,這樣做會事半功倍一點,關于C/C++文法的學習不是這裡的重點,大家感興趣的話可以直接找資料學習,請從櫃底抽出大學教材《C語言程式設計——譚浩強》,拍拍上面的灰塵,随便過一遍^.^
一、明确一些基本概念
1,JNI
Java Native Interface Java 本地開發的接口。JNI 是一個協定,這個協定用來溝通java代碼和外部的本地代碼(c/c++)。通過這個協定,java代碼就可以調用外部的c/c++代碼,外部的c/c++代碼也可以調用java代碼。

2,CDT
C/C++ Develop tools,C/C++開發工具。是Eclipse上的一個插件,主要是讓C/C++代碼能夠高亮顯示。這個元件不是必要的,除非你是C/C++高手,喜歡在記事本上寫代碼,對于一般的程式員還是裝一下吧,高亮顯示很重要的。
3,NDK
Native Develop Kits,本地開發套件。這個套件是非常重要的,是Google提供給我們的一個在Android上開發JNI程式的工具集,有了它會使得開發高效的多。
4,cygwin
Windows下的Linux模拟器。大家知道Android是基于Linux核心的作業系統,是以在編譯C/C++源碼的使用得使用Linux環境,将其編譯成Linux特定平台的檔案.so或者.a。好消息是,NDK高版本中提供了Windows下開發套件的支援,cygwin可以不使用,直接在Windows下平台編譯也是可行的,但是為了顯示學習,最好還是需要了解一點的。
二、NDK環境搭建
1,安裝CDT
如果是使用的是從Android Develop官網上下載下傳的內建了ADT一整套的IDE的話,請跳過這一步,因為ADT中已經內建好了CDT插件,直接使用就可以了。如果使用的是傳統的Eclipse自裝插件的方式的話,有兩種方式可供安裝CDT。 (1)下載下傳CDT插件進行安裝。在Eclipse社群官網可以找到下載下傳連結 https://eclipse.org/cdt/。 (2)線上安裝。步驟如下: 打開Eclipse工具欄Help-->install new software
選擇 Helios- http://download.eclipse.org/release/helios ,等待展開,選擇Programing language
選擇c/c++ 開發工具
一路next下去,同意licenses。
安裝成功會提示是不是确認重新開機eclipse,重新開機就完成安裝。
2,安裝cygwin
NDK需要運作在linux環境下,cygwin是windows下模拟linux的一個工具。Cygwin是一個程式,支援很多插件。可以去cygwin的官網上下載下傳http://www.cygwin.com/輕按兩下安裝,也可以從CSDN資源頁上下載下傳我上傳的資料包,裡面包含cygwin的安裝程式和安裝包,位址是:http://download.csdn.net/detail/lee_tianya/8235323
選擇安裝方式請注意了,一般可以選擇從Internet上線上安裝,不過速度很慢,而且中途不能斷開,如果網速不好中途斷開了,那麼就必須從頭開始下載下傳,非常不舒服。第二種方式是本地安裝,先下載下傳好安裝所需要的檔案放在本地磁盤上,然後選擇安裝目錄即可,我這裡是本地安裝。
選擇安裝目錄的時候請注意:安裝目錄不可以出現空格,最好不要出現中文等非英文字元。
安裝完畢後 ,桌面會出現一個快捷圖示,輕按兩下快捷小圖示,打開cygwin。
首先程式會初始化
敲入指令
Make –v
顯示出來 GNU Make 的版本 ,說明我們的cygwin模拟的linux編譯環境 模拟成功了.
3,安裝NDK
首先翻牆上Google Android Develop的官網去下載下傳NDK,位址是http://developer.android.com/tools/sdk/ndk/index.html
我這裡選用的Windows版本64位的r10d版本的ndk,是目前最新版本,android-ndk-r10d-windows-x86_64.exe,下載下傳完成後點選exe檔案,會自定解壓到目前目錄下,這個過程比較漫長,可見更新造成安裝的過大啊,好,解壓完畢之後我移動E:/NDK目錄下了。
做完上面的一些步驟後,環境基本上是搭建完成了,現在我們使用cygwin模拟Linux環境下,進入Windows路徑E:/NDK/android-ndk-r10d下,執行ndk-build腳本。
第一步:進入根目錄找到根目錄下的cygdrive檔案,該檔案對應的是Windows下的所有盤符:
第二步:進入ndk所在目錄:
第三步:執行ndk-build腳本
通過上面的步驟,我們就可以使用ndk-build腳本了,但是這樣的過程是在是太繁瑣了,使用起來是非常的不友善,那麼下面我們來使用一下簡便的方法吧,配置檔案。
為了友善直接在指令行裡面使用ndk-build,需要給cygwin的環境變量裡面添加ndk的目錄
首先
我們在cygwin安裝的目錄下找到etc/profile檔案,這個檔案就是cygwin的配置檔案,用記事本打開這個檔案,找到如下一行:
然後
我們在cygwin的控制台上找到ndk的解壓路徑
接下來
我們複制這個路徑到Path中,注意Linux環境變量中的路徑分割使用英文冒号“:”來區分
最後 檢測是否配置完成,在cygwin控制台下輸入“ndk-build”指令
若指令行顯示的是如上圖所示的資訊,說明配置完成了,可以使用了,若不是這種情況,請根據文章的描述再進行一次配置。
好了,NDK開發中的環境搭建到此就結束了,下面就可以使用NDK環境來開發了,關于NDK開發,後續的文章會慢慢介紹。