ndk-build
腳本可用於編譯採用 NDK 基於 Make 的編譯系統的項目。此外,咱們還針對 ndk-build
使用的 Android.mk和 Application.mk 配置提供了更具體的文檔。html
運行 ndk-build
腳本至關於運行如下命令:node
$GNUMAKE -f <ndk>/build/core/build-local.mk <parameters>
$GNUMAKE
指向 GNU Make 3.81 或更高版本,<ndk>
則指向 NDK 安裝目錄。您能夠根據這項信息從其餘 shell 腳本(甚至是您本身的 Make 文件)中調用 ndk-build。linux
ndk-build
腳本位於 NDK 安裝目錄頂層。要從命令行運行該腳本,請在應用項目目錄或其子目錄中進行調用。例如:android
$ cd <project> $ <ndk>/ndk-build
在此示例中,<project>
指向項目的根目錄,<ndk>
則是您安裝 NDK 的目錄。shell
ndk-build 的全部參數都將直接傳遞到運行 NDK 編譯腳本的底層 GNU make
命令。請將 ndk-build
和表單 ndk-build <option>
中的選項結合使用。例如:app
$ ndk-build clean
您可使用如下選項:ide
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_DEBUG=1
NDK_DEBUG=0
NDK_HOST_32BIT=1
NDK_APPLICATION_MK=<file>
NDK_APPLICATION_MK
變量指向的特定
Application.mk
文件進行編譯。
-C <project>
<project>
的項目路徑的原生代碼。若是您不想在終端經過
cd
切換到該路徑,此選項會很是有用。
使用 NDK_DEBUG
選項,並在特定狀況下經過 AndroidManifest.xml
指定調試版或發佈版編譯、優化相關行爲以及是否包含符號。表 1 顯示了每一個可能的設置組合的結果。ui
清單設置 | 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 位版本。例如,目錄 <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>