ndk-build
指令碼使用 NDK 基於 Make 的建構系統建構專案。我們針對 ndk-build
使用的 Android.mk 和 Application.mk 設定提供了更詳細的說明文件。
內部原理
執行 ndk-build
指令碼相當於執行下列指令:
$GNUMAKE -f <ndk>/build/core/build-local.mk <parameters>
$GNUMAKE
指向 GNU Make 3.81 以上版本,<ndk>
則指向 NDK 安裝目錄。您可以使用這項資訊從其他殼層指令碼 (或甚至從自己的 Make 檔案) 叫用 ndk-build。
從指令列叫用
ndk-build
指令碼位於 NDK 安裝目錄頂層。如要從指令列執行這個指令碼,請在應用程式專案目錄或其子目錄中進行叫用。
例如:
$ cd <project> $ <ndk>/ndk-build
在這個範例中,<project>
指向專案的根目錄,<ndk>
則是您安裝 NDK 的目錄。
選項
所有 ndk-build 的參數都會直接傳遞給執行 NDK 建構指令碼的基礎 GNU make
指令。請搭配使用 ndk-build
和表單 ndk-build <option>
中的選項。例如:
$ ndk-build clean
可用的選項如下:
-
clean
-
移除所有之前產生的二進位檔。
注意:在 Mac OS X 中,執行
ndk-build clean
時如有大量平行執行作業,可能會發生包含下列訊息的建構錯誤:rm: fts_read: No such file or directory
為了避免這個問題,建議不要使用
-jN
修飾符,或為N
選取較小的值 (例如 2)。 -
V=1
- 啟動建構作業,並顯示建構指令。
-
-B
- 強制執行完整的重新建構。
-
-B V=1
- 強制執行完整的重新建構,並顯示建構指令。
-
NDK_LOG=1
- 顯示內部 NDK 記錄訊息 (用於偵錯 NDK 本身)。
-
NDK_DEBUG=1
- 強制執行可進行偵錯的建構 (參閱表 1)。
-
NDK_DEBUG=0
- 強制執行發布子版本 (參閱表 1)。
-
NDK_HOST_32BIT=1
- 一律使用 32 位元模式的工具鏈。
-
NDK_APPLICATION_MK=<file>
-
使用
NDK_APPLICATION_MK
變數指向的特定Application.mk
檔案進行建構。 -
-C <project>
-
建構位於
<project>
的專案路徑的原生程式碼。如果不想在終端機透過cd
切換到這個路徑,這項功能將非常實用。
可進行偵錯與發布子版本
使用 NDK_DEBUG
選項 (在特定情況下搭配使用 AndroidManifest.xml
) 來指定偵錯子版本或發布子版本、最佳化相關行為以及是否包含符號。表 1 顯示了每個可能的設定組合結果。
資訊清單設定 | NDK_DEBUG=0 | NDK_DEBUG=1 | 未指定 NDK_DEBUG |
---|---|---|---|
android:debuggable="true" | 偵錯;符號;最佳化*1 | 偵錯;符號;未最佳化*2 | (與 NDK_DEBUG=1 相同) |
android:debuggable="false" | 發布;符號;最佳化 | 發布;符號;未最佳化 | 發布;無符號;最佳化*3 |
*2:用於執行
ndk-gdb
的預設值。*3: 預設模式。
注意:「NDK_DEBUG=0」等同於「APP_CLICKIM=release」,並使用「-O2」編譯。「NDK_DEBUG=1」等同於「Application.mk」中的「APP_OptIM=debug」,並使用「-O0」編譯。如要進一步瞭解「APP_optIM」,請參閱 Application.mk。
指令列的語法範例如下:
$ ndk-build NDK_DEBUG=1
要求
一般來說,您需要 GNU Make 4 才能使用 ndk-build 或 NDK。NDK 包含其自己的 GNU Make 副本,除非您將 $GNUMAKE
環境變數設為指向不適當的 Make,否則 NDK 將會使用這個副本。
JSON 編譯資料庫
在 NDK r18 以上版本中,ndk-build 可以產生 JSON 編譯資料庫。
您可以使用 ndk-build compile_commands.json
產生資料庫而無需建構程式碼,也可以使用 ndk-build GEN_COMPILE_COMMANDS_DB=true
建構程式碼,同時產生資料庫。