1. 程式人生 > >Eclipse整合Android NDK詳解

Eclipse整合Android NDK詳解

1        目錄

Eclipse整合Android NDK說明... 1

2       為什麼要用NDK?... 2

3       為什麼要整合?... 2

4       怎樣操作?... 2

4.1        預備條件... 2

4.1.1      

Cygwin. 2

4.1.2       Eclipse. 2

4.1.3       Eclipse CDT. 3

4.1.4       Android SDK. 3

4.1.5       Android NDK. 3

4.2        開始整合... 3

4.2.1      

新建工程... 3

4.2.2       工程屬性... 4

 

 

 

 

 

2          為什麼要用NDK?

《Pro Android Games》

Some Java developerssimply dismiss other languages, especially procedural languages like C. Ibelieve

that you shouldembrace the elegant object oriented features of Java and the raw power of C andthere is

nothing you cannot doin the gaming world.

 

相比起Android的開源專案而言,C世界已經積累了很多可供複用的開源專案(包括很多著名的遊戲如Quake、DOOM),在執行效率上涉及到大量數學運算的部分也可以考慮由C完成。

3          為什麼要整合?

可以大大提高開發效率

4          怎樣操作?

4.1         預備條件

4.1.1  Cygwin

1、下載NDK包

2、解壓,我們這裡將解壓到/home/ideasandroid/dev/目錄下。

解壓後目錄結構為:/home/ideasandroid/dev/android-ndk-r4

3、配置path路徑:

命令列執行sudo gedit/etc/profile,在檔案末尾加入如下內容:

#set NDK env

NDKROOT=/home/ideasandroid/dev/android-ndk-r4=

export PATH=$NDKROOT:$PATH

儲存後,重啟機器。至此 android NDK 安裝完畢。

4、編譯sample工程:

執行命令 cd/home/ideasandroid/dev/android-ndk-r4/samples/hello-jni 進入示例專案根目錄,然後執行如下命令:

ndk-build

 

 

如果你工作在Windows環境而又不想使用linux環境,可以安裝cygwin(http://www.cygwin.com/ ),為了使用gcc注意cygwin的必選安裝包在devel目錄下:binutils,gcc,make

Cygwin的更多細節可以從網上獲取。

總之,安裝完成以後,執行cygwin的快捷方式,在控制檯輸入命令 gcc和make,有合理的反饋即可(不是SB的command not found),證明你就可以在偽造的linux下開始造人計劃了。

我在cygwin裡面加了個環境變數,你也可以考慮加一下,後面方便(寫你自己的目錄哦):

ANDROID_NDK_ROOT=/cygdrive/d/android-ndk-r5b

export ANDROID_NDK_ROOT

4.1.2   Eclipse

下載最新版的Eclipse

4.1.3   Eclipse CDT

CDT,就是Eclipse的C/C++環境,線上安裝地址 http://download.eclipse.org/tools/cdt/releases/galileo

執行一個NDK的例子工程後發現,CDT並不是必須的

4.1.4   Android SDK

下載Android sdk

4.1.5  AndroidNDK

我下載的是http://dl.google.com/android/ndk/android-ndk-r5-windows.zip最新的版本。

 

4.2         開始整合

4.2.1  新建工程

執行Eclipse,新建一個android project,取名hello-jni(或者你喜歡的其他比如fxxk-jni也行)。

工程程式碼就從你的NDK/samples/hello-jni拷貝一份即可,記得拷貝jni那個目錄,最終的目錄結構如圖。

 

如果你現在執行這個工程,就會在android控制檯看到如下錯誤:

java.lang.UnsatisfiedLinkError:Library hello-jni not found

因為你還沒有造出那個libhello-jni.so出來。

4.2.2  工程屬性

開啟hello-jni工程屬性,選擇builder,選擇program,點OK

 

配置如下,名字隨便取一個,location和working directory要和你的cygwin目錄一致,arguments要和你的工程目錄一致。

我的arguments是:--login -c "cd/cygdrive/d/AndroidCode/hellondk &&/cygdrive/d/android-ndk-r5b/ndk-build"

 

上面的圖片應該看得清吧,然後勾選其他配置如下

 

 

注意在勾選Specify working set of relevant resources時指定資源選擇你的工程的jni目錄即可。

當以上步驟都正確配置無誤,儲存配置後應該就會自動編譯jni目錄下的C相關程式碼並輸出相應的.so庫檔案到工程的libs目錄下,libs目錄會自動建立。

編譯時控制檯輸出類似如下:

 

如果出現控制檯出現:

can't open file/cygdrive/e/android-ndk-r7/build/awk/check-awk.awk


 source line number 1 source file/cygdrive/e/android-ndk-r7/build/awk/check-awk.awk
 context is
        >>>  <<<
Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point toGawk or Nawk !
/cygdrive/e/android-ndk-r7/build/core/init.mk:258: *** Android NDK: Aborting.   。 停止。

 

出現此類問題的解決辦法是: \NDK目錄\prebuilt\windows\bin\awk.exe,把awk.exe刪除或改名,之後編譯通過。

再執行工程,結果正確。

以後修改了C程式碼,儲存後也會自動觸發編譯,省時省力。