eclipse 集成ndk

       在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

Eclipse CDT(C Development Tooling) 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安裝包。這一切都極其簡便。


發佈了19 篇原創文章 · 獲贊 23 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章