1. 程式人生 > >Windos下Android(ADT Bundle)配置NDK的兩種方法------ADT Cygwin NDK配置彙總

Windos下Android(ADT Bundle)配置NDK的兩種方法------ADT Cygwin NDK配置彙總

               

     Android開發環境由windows下ADT Bundle搭建,且按前文http://blog.csdn.net/yanzi1225627/article/details/16876311 所示,安好cygwin和CDT,能夠執行c或c++的helloworld。NDK我用的android-ndk-r7-windows。

第一種配置方法

      參考http://blog.csdn.net/xinzheng_wang/article/details/7416543文中所說,android-ndk-r7-windows往上的版本都集成了cygwin,因此無需再安cygwin。所謂的集成了cygwin就是說,安裝包解壓後有個ndk-build.cmd命令。配置eclipse直接調這個cmd命令,完成編譯。而安裝cygwin的話,就是要像在linux下一樣,cd到工程資料夾,然後輸入ndk-build,完成編譯。個人還是傾向於安裝cygwin,因為不安的話,沒法在eclipse上編譯執行除錯C/C++程式。年齡大了,不想折騰了。既然eclipse提供了編譯C/C++的環境,那就一切在這上面搞吧。

    (1)解壓縮android-ndk-r7-windows(77.5M),將ndk-build.cmd的路徑設定到系統環境變數path裡。

(2)接下來是比較關鍵的。匯入ndk解壓包裡的hello-jni至eclipse,然後右鍵專案選擇屬性或直接按快捷鍵Alter+Enter,點開Builders--new---Program,Name是自己隨便起的,這裡叫NDK_Builder,下面的Location通過BrowseFileSystem選中ndk-build.cmd就可以了。Working Directory通過BrowseWorkspace選擇當前工程就ok。Refresh選項如何想對整個工作空間起 作用就選第一個,如果只對當前專案起作用就選第三個。在Build Options裡選上After a “Clean”、During manual builds 、During auto builds及最下面的specify working set of relevant resource,選擇當前工程裡的jni資料夾,即ndk編譯時的原始碼和mk檔案所在目錄。

 

編譯執行時報錯:

/usr/bin/sh: -c: line 1: syntax error: unexpected end of filemake: *** [libs/armeabi/gdbserver] Error 1

      這是cygwin的環境變數在Path裡放在ndk的後面導致的。http://blog.csdn.net/xinzheng_wang/article/details/7416543此文中的說法有誤。 將cygwin的環境變數放在ndk的前面,編譯時通過了,app開啟時一開就掛。原因是libs資料夾根本就沒生成。不得已,在path裡講cygwin的環境變數刪除,然後重啟eclipse,否則環境變數設定無效。再次執行時可以看到libs正常生成,app執行通過。

      注意:這種方式無需手動輸入ndk-build,直接clean後自動編譯jni資料夾。系統環境變數Path裡不能設定cygwin!

第二種方式:

      即不用在eclipse新加一個Builder,不呼叫ndk-build.cmd,直接在cygwin下手動進到工程目錄,然後輸入ndk-build。如果提示obj/local/.....***多個目標匹配,停止。

需在工程裡將obj資料夾下的東西刪除即可。

     首先進到cygwin下輸入ndk-build命令試下,如果說這個命令未被識別就需要在cygwin裡設定下。vi  /etc/profile 然後輸入i表這示可以插入,注意在cygwin裡,按enter表示下移,而不是游標的下鍵,可能是筆記本鍵盤的問題。然後在檔案的末尾加上  export NDK=/cygdrive/d/ProgramFile/android-ndk-r7/  注意這裡/cygdrive/d/就是表示的d盤,window下是用 \ 而linux下是用 /  真蛋疼。然後按esc鍵,再按:輸入wq,儲存後再輸入命令:source /etc/profile使剛才的設定生效。完畢後,輸入ndk-build命令測試一把,如果能識別ndk-build就說明環境配置好了。如下:

[email protected] /$ ndk-buildAndroid NDK: Could not find application project directory !Android NDK: Please define the NDK_PROJECT_PATH variable to point to it./cygdrive/d/ProgramFile/android-ndk-r7/build/core/build-local.mk:102: *** Android NDK: Aborting    。 停止。

        奇怪的是我安裝的Cygwin2.774版本,ndk的環境變數只在Path裡設定了下,在cygwin裡直接就可以識別ndk-build命令了!編譯jni成功時顯示:

總結如果只看NDK編譯的話,這兩種方式是可以共存的。但是考慮到用eclipse來編譯C/C++檔案,則必須在Path裡設定cygwin的bin目錄,因此跟第一種使用NDK的方式就衝突了。因此,我推薦使用第二種藉助cygwin來使用ndk-build的方式。至此,CDT、NDK、Cygwin搭建方式就完畢了。總結下需要設定以下項:

1、系統環境變數Path新增: D:\ProgramFile\cgwin\bin;D:\ProgramFile\android-ndk-r7;

2、eclipse裡新增:

C_INCLUDE_PATH D:\ProgramFile\cgwin\lib\gcc\i686-pc-cygwin\4.7.3\include

CPLUS_INCLUDE_PATH:D:\ProgramFile\cgwin\lib\gcc\i686-pc-cygwin\4.7.3\include\c++;D:\ProgramFile\cgwin\lib\gcc\i686-pc-cygwin\4.7.3\include\c++\backward;D:\ProgramFile\cgwin\lib\gcc\i686-pc-cygwin\4.7.3\include

3,如果cygwin進去後找不到ndk-build,需要在/etc/profile裡設定NDK環境變數,之後source以下。

4,系統環境變數裡的胚胎選項:LIBRARY_PATH   D:\ProgramFile\cgwin\lib  這一項我沒設,除錯C C++程式時暫未發現任何異常。