文章的内容是从Android开发者官网扒的,为了防止再登不上去,记录一下。官网网址:https://developer.android.com/ndk/guides/ndk-build.html
ndk-build
ndk-build
文件是 Android NDK r4 中引入的一个 shell 脚本。其用途是调用正确的 NDK 构建脚本。
内部构建
运行 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
提供的选项如下:
- 移除以前生成的任意二进制文件。
- 启动构建,并显示构建命令。
- 强制执行完全的重新构建。
- 强制执行完全的重新构建,并显示构建命令。
- 显示内部 NDK 日志消息(用于调试 NDK 本身)。
- 强制执行可调试版构建(请参阅 表 1)。
- 强制执行发布版构建(请参阅 表 1)。
- 始终使用 32 位模式下的工具链(请参阅 64 位和 32 位工具链)。
-
使用
NDK_APPLICATION_MK
变量指向的特定Application.mk
文件构建。 -
构建位于
<project>
的项目路径的原生代码。如果您不想在终端通过cd
切换到该路径,则此选项非常有用。
clean
V=1
-B
-B V=1
NDK_LOG=1
NDK_DEBUG=1
NDK_DEBUG=0
NDK_HOST_32BIT=1
NDK_APPLICATION_MK=<file>
-C <project>
可调试版与发布版构建
使用 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 |
*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
生成的原生调试文件。
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 位二进制文件。
要求
一般情况下,您需要安装 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>