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>