ndk-build

ndk-build 脚本用于构建采用 NDK 基于 Make 的构建系统的项目。 此外,还针对 ndk-build 使用的 Android.mkApplication.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=0NDK_DEBUG=1NDK_DEBUG 未指定
android:debuggble="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/ 可能同时包含分别用于 32 位和 64 位模式中的 Linux 工具的 linux-x86linux-x86_64 文件夹。 ndk-build 脚本自动选择工具链的 64 位版本(如果主机操作系统支持)。 您可以通过在您的环境中或 ndk-build 命令行中使用 NDK_HOST_32BIT=1 来强制使用 32 位工具链。

请注意,64 位工具可以更好地利用主机资源(例如,它们速度更快,并且可处理更大的程序),同时它们仍可以为 Android 生成 32 位二进制文件。

要求

一般情况下,您需要 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>