Android NDK入坑之旅(四):腳本文件ndk-build初識


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>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM