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 安裝目錄。您可以根據這項信息從其他 shell 腳本(甚至是您自己的 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 位模式下的工具鏈(詳見 64 位和 32 位工具鏈)。
-
NDK_APPLICATION_MK=<file> -
使用
NDK_APPLICATION_MK變量指向的特定Application.mk文件進行編譯。 -
-C <project> -
編譯位於
<project>的項目路徑的原生代碼。如果您不想在終端通過cd切換到該路徑,此選項會非常有用。
可調試版編譯與發布版編譯
使用 NDK_DEBUG 選項,並在特定情況下通過 AndroidManifest.xml 指定調試版或發布版編譯、優化相關行為以及是否包含符號。表 1 顯示了每個可能的設置組合的結果。
表 1. NDK_DEBUG(命令行)和 android:debuggable(清單)組合的結果。
| 清單設置 | NDK_DEBUG=0 | NDK_DEBUG=1 | 未指定 NDK_DEBUG |
|---|---|---|---|
| android:debuggable="true" | 調試;符號;已優化*1 | 調試;符號;未優化*2 | (與 NDK_DEBUG=1 相同) |
| android:debuggable="false" | 發布;符號;已優化 | 發布;符號;未優化 | 發布;無符號;已優化*3 |
*1:用於分析。
*2:用於運行 ndk-gdb 的默認值。
*3:默認模式。
注意:NDK_DEBUG=0 相當於 APP_OPTIM=release,並用 -O2 編譯。NDK_DEBUG=1 相當於 Application.mk 中的 APP_OPTIM=debug,並用 -O0 編譯。要詳細了解 APP_OPTIM,請參閱 Application.mk。
例如,命令行上的語法為:
$ ndk-build NDK_DEBUG=1
64 位和 32 位工具鏈
某些工具鏈同時隨附了 64 位和 32 位版本。例如,目錄 <ndk>/toolchain/<name>/prebuilt/ 和 <ndk>/prebuilt/可能同時包含 linux-x86 和 linux-x86_64 文件夾,以分別用於 32 位和 64 位模式下的 Linux 工具。ndk-build 腳本會自動選擇工具鏈的 64 位版本(如果主機操作系統支持的話)。您可以通過在自己的環境或 ndk-build 命令行中使用 NDK_HOST_32BIT=1 來強制使用 32 位工具鏈。
請注意,64 位工具可以更好地利用主機資源(例如,它們速度更快,並且可處理更大的程序),同時它們仍可以生成 32 位 Android 二進制文件。
要求
通常,您需要安裝 GNU Make 3.81 或更高版本才能使用 ndk-build 或 NDK。編譯腳本將檢測不合規的 Make 工具,並生成錯誤消息。
如果您已安裝 GNU Make 3.81,但默認的 make 命令不啟動它,請在您的環境中定義 GNUMAKE,以便在啟動 ndk-build 之前指向它。例如:
$ export GNUMAKE=/usr/local/bin/gmake
$ ndk-build
您可以將 $NDK/prebuilt/<OS>/bin/ 中的其他主機預編譯工具替換為下列環境變量:
$ export NDK_HOST_AWK=<path-to-awk>
$ export NDK_HOST_ECHO=<path-to-echo>
$ export NDK_HOST_CMP=<path-to-cmp>
