ndk-build 文件是 Android NDK r4 中引入的一個 shell 腳本。
其用途是調用正確的 NDK 構建腳本。
1.內部構建
運行 ndk-build 腳本相當於運行以下命令:
$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>
$GNUMAKE 指向 GNU Make 3.81 或更新版本,<ndk> 指向 NDK 安裝目錄。 您可以使用此信息從其他 shell 腳本甚至您自己的 Make 文件調用 ndk-build。
2.從命令行調用
ndk-build 文件位於 NDK 安裝目錄的頂層。若要從命令行運行該文件,請在應用項目目錄中或其子目錄中調用它。例如:
cd <project>
$ <ndk>/ndk-build
在此示例中,<project> 指向項目的根目錄,<ndk> 是您安裝 NDK 的目錄。
3.選項
ndk-build 的所有參數將直接傳遞到運行 NDK 構建腳本的底層 GNU make。 將 ndk-build 和表單 ndk-build <option> 中的選項結合使用。 例如:
$ ndk-build clean
提供的選項如下:
clean
移除以前生成的任意二進制文件。
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 切換到該路徑,則此選項非常有用。
4.可調試版與發布版構建
使用 NDK_DEBUG 選項,在特定情況下,通過 AndroidManifest.xml 指定調試版或發布版構建、與優化相關的行為以及是否包含符號。 表 1 顯示每個可能的設置組合的結果。
表 1. NDK_DEBUG(命令行)的結果和 android:debuggable(清單)組合。
NDK_DEBUG=0 | NDK_DEBUG=1 | 未指定 NDK_DEBUG | |
android:debuggble="true" | 調試;符號;已優化*1 | 調試;符號;未優化*2 | (與 NDK_DEBUG=1 相同) |
android:debuggable="false" | 版本;符號;已優化 | 版本;符號;未優化 | 版本;無符號;已優化*3 |
*1:用於分析
*2:用於運行 ndk-gdb 的默認值。
*3:默認模式。
注: NDK_DEBUG=0 等同於 APP_OPTIM=release,並符合 GCC -O2 選項。NDK_DEBUG=1 等同於 Application.mk 中的 APP_OPTIM=debug,並符合 GCC -O0 選項。 如需了解
有關 APP_OPTIM 的詳細信息,請參閱 Application.mk。
例如,命令行上的語法為:
$ ndk-build NDK_DEBUG=1
如果您使用 SDK r8 以前版本的構建工具,您還必須修改您的 AndroidManifest.xml 文件以指定調試模式。 執行此操作的語法類似於如下:
<application android:label="@string/app_name"
android:debuggable="true">
從 SDK r8 開始,您不需要使用 AndroidManifest.xml。構建調試軟件包(例如,使用 ant 調試或對應的 ADT 插件選項)可使工具自動選取通過 NDK_DEBUG=1 生成的原生調試文件。
5.64 位和 32 位工具鏈
某些工具鏈附帶 64 位和 32 位版本。例如,目錄 <ndk>/toolchain/<name>/prebuilt/ 和 <ndk>/prebuilt/ 可能同時包含分別用於 32 位和 64 位模式中的 Linux 工具的 linux-x86 和 linux-x86_64 文件夾。
ndk-build 腳本自動選擇工具鏈的 64 位版本(如果主機操作系統支持)。
你可以通過在您的環境中或 ndk-build 命令行中使用 NDK_HOST_32BIT=1 來強制使用 32 位工具鏈。
請注意,64 位工具可以更好地利用主機資源(例如,它們速度更快,並且可處理更大的程序),同時它們仍可以為 Android 生成 32 位二進制文件。
6.要求
一般情況下,您需要安裝 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>