前言
???????最經在看Android方法的基礎知識,看到一篇文章(http://www.rbgrn.net/content/348-get-your-eclipse-integrated-ndk-on)介紹如何把Android的NDK集成到Eclipse,順便就把它翻譯過來。
???????注:
* 技術名稱保留不譯,比如Cygwin
* Eclipse(英文版)的界面文本不譯,比如按鈕(Specify Resources)。
* 括號內的內容,是我添加的注釋。
?
?
翻譯正文:
???????在Android的游戲開發中,你遲早會發現有必要把部分代碼跑得更快。用C寫的Android代碼比同樣的Java版本,快上10~100倍。我可以證實這個事實,在我最新的3D游戲引擎中,我把部分組件用原生程序(即用C/C++寫代碼,編譯成二進制的動態鏈接庫文件)重寫。
這樣帶來了極大的性能提升,但我們也不得不面對這么一個事實:Eclipse對Java的開發提供了極佳的支持的同時,對C的開發卻極其糟糕。Eclipse不適合C的開發,對嗎?錯,現在向你展示如何在Eclipse中,建立一個快速的NDK開發環境。
???????首先聲明一點,Eclipse不僅僅適合于開發Java應用程序。Eclilpse為Java開發提供了極好的支持,它的設計初衷也是為了Java。但得益于它的設計架構,Eclipse能夠為包括C語言在內的任何語言的開發提供支持。一個名為CDT的插件,使得在Eclipse里能對C/C++進行開發。盡管我說得有些過了頭。接下來這些,是你所需要的:
Android NDK(Native Development Kit)[http://developer.android.com/sdk/ndk/1.6_r1/index.html](http://developer.android.com/sdk/ndk/1.6_r1/index.html)
Eclipse CDT(C Development Tooling)?[http://www.eclipse.org/cdt/](http://www.eclipse.org/cdt/)
如果用的是windows操作系統,你需要安裝Cygwin,并安裝上重要的包(特別是GCC和Make)。
???????接下來的步驟是:
???????安裝上述三個包。我把NDK安裝到C:/Android_NDK。在后面的文章中,我都默認為該目錄是NDK的安裝目錄。
???????為了熟悉NDK,在C:/Android_NDK/apps目錄中,你需要配置每個項目的“app”。就像NDK中的例子一樣,它們能夠正確編譯運行,并要求嚴格的配置。
???????測試NDK的辦法:
???????啟動cygwin
???????cd /cygdrive/c/Android_NDK
???????make APP=hello-jni
???????根據上述的步驟,你將能夠正確編譯。如果cygwin漏裝了GCC、Make或者其它開發包,你有必要重新安裝Cygwin,并且確保全部必要的開發包已經安裝。如果你遇到什么特殊的錯誤,我建議把這些錯誤報告給NDK用戶組。
???????一旦NDK能夠正常工作,你就能夠添加和配置好你的NDK開發項目。參考NDK的example一樣,你需要一個詳細的build文件(Android.mk),該文件告訴NDK編譯器編譯什么文件。JNI代碼文件通常放在應用程序項目的jni文件夾下。該目錄下的Android.mk文件指引NDK編譯器如何編譯程序。
???????在完成這些基本配置后,你會想去寫C代碼。NDK使用Java標準的JNI技術實現。大量的關于JNI的文檔在這里都適用。怎樣去編寫JNI代碼,已經超出了本文的范疇。
???????接下來是有用的部分:
???????如果開發過NDK程序,你很有可能習慣使用文本編輯器或者vim去編輯的你C/C++代碼,然后使用make APP=myapp的命令來編譯,接著點擊更新在Eclipse中的項目,最后盼望著那已部署上的共享庫是最新的。多么痛苦的一件事啊!其實,有一個更好的方法。
???????目前,已經安裝上了CDT,你就可以在Eclipse中編譯你的C/C++文件。右擊C/C++源文件,選擇使用C/C++編輯器打開,就能夠使用CDT編譯器了。多友好!因為尚未編譯C/C++源文件,你并不清楚代碼正確與否。但這也使得你更友好地在一個界面下編輯代碼。
???????生成項目也是快速而靈活的。你曾經使用過Eclipse的生成器嗎?它們是一些可配置的開關,用于執行你所配置的命令和刷新工程資源。以下是我的配置:
???????右擊你的項目,選擇“properties”
???????在左邊的列表中選擇“Builders”
???????在右側,點擊“New…”按鈕
???????在列表框,選擇“Program”作為配置類型;點擊“OK”按鈕,進入下一個配置對話框。
???????命名name為“Native Builder”
???????選擇Location為“c:/cygwin/bin/bash.exe”
???????“Working Directory”為“c:/cygwin/bin”
???????“Arguments”為:
--login –c “cd /cygdrive/c/Android_NDK && make APP=myapp”
確保在login前有兩個連接號,-c后面的引號。
???????接著打開“refresh”的tab面板:
???????選中“Refresh resources upon completion”
???????選擇“Specific resources”
???????點擊“Specify resources”按鈕,選擇你項目的lib目錄
???????選中“Recursively include sub-folders”
???????接著打開“Build Options”的tab面板:
???????選中“Allocate Console”
???????選中“Launch in background”
???????選中“Run the builder After a Clean”
???????選中“Run the builder During manual builds”
???????選中“Run the builder During auto builds”
???????選中“Specify working set of relevant resources”
???????點擊“Specify Resources”按鈕,選擇你項目的JNI目錄,并包含所有的文件。
???????點擊“OK”按鈕。
???????這里假設:cygwin安裝在c:/cygwin;NDK安裝在c:/Android_NDK;項目工程名稱是“myapp”。根據你的安裝配置,相應地替換這些參數。
???????你剛剛做了什么呢?你使得,在JNI的目錄下,每次修改任何文件,Eclipse都通過cygwin自動啟動NDK編譯你的工程,并在控制臺輸出編譯信息。當它編譯完成,將自動刷新工程輸出目錄(lib),并觸發ADT生成一個新的APK安裝包。這一切都極其簡便。
???????把NDK集成到Eclipse,實實在在地加速了我當前項目的開發進度。希望你能夠在文本中受益。