1. 程式人生 > >如何指定讓Android的NDK工具編譯出Release版本或Debug版本的Native程式

如何指定讓Android的NDK工具編譯出Release版本或Debug版本的Native程式

Android提供了NDK開發工具,它在GNU Make的基礎上,自己預先寫好了一些通用的指令碼。

這樣就使得開發者不需要重頭編寫MakeFile,只需要為自己的模組編寫相應的Application.mk(如需詳細瞭解請參考《Application.mk語法解釋》)和Android.mk(如需詳細瞭解請參考《Android.mk語法解釋》)指令碼檔案,並且在指令碼中還可以使用很多Android NDK中預先定義好的變數和函式,從而極大的減少了開發者寫編譯指令碼的難度,大大方便了對Native程式的開發。

而在編譯的時候,只需要在命令列下進入專案所在目錄,直接鍵入ndk-build命令就行了,它會在專案目錄項搜尋有沒有“jni”子目錄,並讀取其中相應的Application.mk和Android.mk進行編譯,非常簡單。


這個命令太自動了,一切都替你完成了,但是有時候也會造成不便。比如,你想自己編譯一個Debug版本的程式進行除錯,但是Android NDK就是給你生成Release版本的。

那麼,有沒有什麼辦法,可以明確告訴Android NDK,到底是編譯成Release版本的還是Debug版本的呢?

大概一共有三種辦法,這裡簡單總結一下:

1)修改AndroidManifest.xml

ndk-build命令,預設會在當先專案路徑下搜尋到AndroidManifest.xml檔案,並檢視<application>標籤中,有沒有將屬性android:debuggable明確的設定成"true"。

如果設定成true了,則會將模組編譯成Debug版本的;反之,如果沒有明確設定這個屬性,或將其明確設定成“false”,則會將該模組編譯成Release版本的。

2)在Application.mk檔案中指定

可以在你要編譯的模組的目錄中的Application.mk檔案中,設定APP_OPTIM變數的值,來明確指定要將你的模組編譯成Release版本或Debug版本的(如果Application.mk檔案不存在的話,請建立一個)。

APP_OPTIM變數可以被設定成兩個值,即debug或release。

指定成debug,你的模組就會編譯成debug版的:

APP_OPTIM := debug

反之,如果指定成release,你的模組就會編譯成release版的:

APP_OPTIM := release

如果設定了這個變數的話,則在AndroidManifest.xml中無論怎麼指定都沒有影響,最終起效果的是這個變數的值。

而如果沒有設定這個變數的話,才會根據AndroidManifest.xml中指定的版本來編譯。

3)在ndk-build命令的引數中指定

從Android NDK r5版本開始,可以直接在ndk-build命令中,使用引數來指定編譯出的是Release還是Debug版的。

如果想編譯為Debug版本的,使用下面的命令:

ndk-build NDK_DEBUG=1

反之,如果想編譯為Release版本的,可以使用下面的命令:

ndk-build NDK_DEBUG=0

如果不明確指定的話,則先檢視Application.mk檔案中有沒有明確指定APP_OPTIM變數的值。

如果有的話直接按照它指定的值編譯不同的版本;如果沒有的話,則繼續看AndroidManifest.xml中的情況來定到底編譯哪個版本。