2011-07-05 22 views
9

我正在研究一個必須移植到Android的大型遊戲引擎。所有的代碼都是C/C++,所以我們通過NDK移植。我已經完成了所有工作,但經過大量精練後,我仍然不確定什麼是構建我們的.so文件的調試與發佈版本的最佳方法。每次手工更換東西都變老了。調試與發佈在Android NDK中構建

對於每個目標你有不同的Application.mk文件嗎?或者有什麼方法可以在jni /目錄下的單個Android.mk文件中包含多個目標?或者,第三種選擇可能是編寫一個標準makefile來設置Android.mk文件用來通知構建過程的環境變量?

最後,關於必須在AndroidManifest.xml文件中設置的android:debuggable標誌的最後一個問題。這實際上對複製到設備的生成本機代碼有什麼影響?

最佳和感謝,

凱文

+0

那麼,你如何選擇調試還是手動釋放? NDK示例似乎沒有任何調試或釋放標誌,也沒有使用-Ox選項。 – Qwertie

回答

9

對於每個目標您有不同的Application.mk文件嗎?

編號分開的子目錄,所有子目錄都有自己的Android.mk(共享和靜態庫),但是我只有一個Application.mk。

我Application.mk就是:

APP_STL := gnustl_static 
APP_OPTIM := debug 

我還是個未知數最好的方法是什麼建築調試與我們的.so文件的發佈版本。每次手工更換東西都變老了。

對於我來說,至少使用jni/Android.mk + Application.mk佈局有點分散。

Application.mk有APP_OPTIM := debug 然後在AndroidManifest.xml中的應用元素我有android:debuggable="true" 當你建立與NDK建造,它使用此清單標誌來確定優化(關閉或在其上是有用的,關爲分析等)

(有點偏離話題)我最近遇到

https://code.google.com/p/android-ndk-profiler/

,當與http://code.google.com/p/jrfonseca/wiki/Gprof2Dot

012組合

生成一些漂亮的圖像,以幫助我的小腦袋掌握手機本身的運行情況。

+1

是的,我做了所有這些事情 - 我最終做的是爲每個目標(發佈/調試)提供不同的Application.mk。然後在每個文件(Release.mk/Debug.mk)中,通過APP_CFLAGS指定全局c標誌並調用ndk-build,從標準makefile中指定Release.mk或Debug.mk。 –

+0

我發現自己比調試更多地進行分析,並且還有幾個標誌可以在每個子項目的基礎上進行設置/過濾(例如,-fomit-frame-pointer和-pg不兼容),所以涉及更多一點在我的情況下,因爲我不希望我的整個lib鏈是-pg。 – dwerner

1

你不需要使用Android.mk系統建立你的.so的。就我個人而言,我使用我自己的Makefile與我需要的目標,這允許非常標準化的調試與發佈構建規範。

+0

Android.mk文件是否支持單個文件中的多個目標?我希望有一種方法可以使用他們的系統來挽救這個問題。 –

+0

我們也使用我們自己的構建系統(不是ndk),但要警告這是一個很大的工作。你肯定會想要構建一些示例NDK項目,並確保你瞭解NDK在編譯器標誌等方面所做的一切(我們不使用NDK的東西,因爲我們也在做很多非android構建;僅僅使用NDK對於android而言,比使用我們自己的構建系統更適合所有工作)。 –

0

我使用單個文件爲不同的目標構建庫。在Application.mk中添加這個「APP_ABI:= armeabi armeabi-v7a」它適用於我。