当前位置: 首页>移动开发>正文

android ptrace 脚本开发 安卓脚本开发教程

说明:

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 的目录

2.1 选项

ndk-build 的所有参数都将直接传递到运行 NDK 构建脚本的底层 GNU make 命令。请将 ndk-build 和表单 ndk-build <option> 中的选项结合使用。例如:

$ ndk-build clean

您可以使用以下选项:

  1. clean
    移除之前生成的所有二进制文件。

注意:在 Mac OS X 上,运行 ndk-build clean 时若有大量并行执行,可能会导致出现包含以下消息的构建错误:rm: fts_read: No such file or directory

为了避免出现此问题,请考虑不使用 -jN 修饰符,或为 N 选择较小的值(例如 2)。

  1. V=1 启动构建,并显示构建命令。
  2. -B 强制执行完整的重新构建。
  3. -B V=1 强制执行完整的重新构建,并显示构建命令。
  4. NDK_LOG=1 显示内部 NDK 日志消息(用于调试 NDK 本身)。
  5. NDK_DEBUG=1 强制执行可调试 build(详见表 1)。
  6. NDK_DEBUG=0 强制执行发布 build(详见表 1)。
  7. NDK_HOST_32BIT=1 始终使用 32 位模式下的工具链(详见 64 位和 32 位工具链)。
  8. NDK_APPLICATION_MK=<file> 使用 NDK_APPLICATION_MK 变量指向的特定 Application.mk 文件进行构建。
  9. -C <project> 构建位于 的项目路径的原生代码。如果您不想在终端通过 cd 切换到该路径,此选项会非常有用。

2.2 可调试 build 与发布 build

使用 NDK_DEBUG 选项,并在特定情况下通过 AndroidManifest.xml 指定调试 build发布 build、与优化相关的行为以及是否包含符号。表 1 显示了每个可能的设置组合的结果。

表 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

三. 要求

一般来说,您需要使用 GNU Make 4 才能使用 ndk-build 或 NDK。除非您已将 $GNUMAKE 环境变量设置为指向不适当的 Make,否则 NDK 包含其自己的 GNU Make 副本。

四. JSON 编译数据库

在 NDK r18 及更高版本中,ndk-build 可以生成 JSON 编译数据库。

您可以使用 ndk-build compile_commands.json 生成数据库而无需构建代码,也可以使用 ndk-build GEN_COMPILE_COMMANDS_DB=true 来构建和生成数据库(如果有负面影响)。

参考: https://developer.android.google.cn/ndk/guides/ndk-build



https://www.xamrdz.com/mobile/4y51931545.html

相关文章: