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
表 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 位版本。例如,目录 <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>