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>

 

 

 

 

posted on 2017-08-23 15:56  冷锋SJ记忆  阅读(2789)  评论(0编辑  收藏  举报

导航