当前位置: 首页 > news >正文

Android NDK开发详解之ndk-build 脚本

Android NDK开发详解之ndk-build 脚本

      • 内部原理
      • 从命令行调用
      • 选项
      • 可调试 build 与发布 build
      • 要求

ndk-build 脚本使用 NDK 的基于 Make 的构建系统构建项目。我们针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。

内部原理

运行 ndk-build 脚本相当于运行以下命令:

$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>

$GNUMAKE 指向 GNU Make 3.81 或更高版本, 则指向 NDK 安装目录。您可以根据这些信息从其他 Shell 脚本(甚至是您自己的 Make 文件)中调用 ndk-build。

从命令行调用

ndk-build 脚本位于 NDK 安装目录顶层。如需从命令行运行该脚本,请在应用项目目录或其子目录中进行调用。例如:

$ cd <project>
$ <ndk>/ndk-build

在此示例中, 指向项目的根目录, 则是您安装 NDK 的目录。

选项

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

$ 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强制执行可调试 build(详见表 1)。 
NDK_DEBUG=0强制执行发布 build(详见表 1)。 
NDK_HOST_32BIT=1始终使用 32 位模式下的工具链。 
NDK_APPLICATION_MK=<file>使用 NDK_APPLICATION_MK 变量指向的特定 Application.mk 文件进行构建。 
-C <project>构建位于 <project> 的项目路径的原生代码。如果您不想在终端通过 cd 切换到该路径,此选项会非常有用。 

可调试 build 与发布 build

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

在这里插入图片描述

注意:“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。NDK 包含其自己的 GNU Make 副本,除非您将 $GNUMAKE 环境变量设置为指向不适当的 Make,否则 NDK 将使用该副本。
JSON 编译数据库

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

您可以使用 ndk-build compile_commands.json 生成数据库而不构建代码,也可以使用 ndk-build GEN_COMPILE_COMMANDS_DB=true 来构建代码,同时生成数据库。

http://www.lryc.cn/news/213354.html

相关文章:

  • 应用于智慧矿山的皮带跑偏视频分析AI算法
  • vue3 UI组件优化之element-plus按需导入
  • 如何创建 Spring Boot 项目
  • 【经验分享】openGauss容灾集群搭建
  • 互联网应用架构的演进(八大架构的演进过程)
  • ROS自学笔记二十六:导航中激光雷达消息
  • 分类模型的评价指标
  • 第五章 I/O管理 八、缓冲区管理
  • 笔记软件推荐!亲测好用的8款笔记软件!
  • MPJQueryWrapper 用法
  • 50元买来的iPhone手机刷机经验
  • 数据结构学习笔记——链式表示中的双链表及循环单/双链表
  • DC电源模块去除输出电源中的高频噪声及杂波
  • 【驱动开发】注册字符设备使用gpio设备树节点控制led三盏灯的亮灭
  • 面向制造企业的持续发展,2023数字化工单管理系统创新篇章-亿发
  • mysql 元数据锁 MDL读锁与MDL写锁
  • 批量预处理哨兵2影像
  • Unity地面交互效果——2、动态法线贴图实现轨迹效果
  • 视频剪辑达人教您:如何运用嵌套合并技巧制作固定片尾
  • 【腾讯云 TDSQL-C Serverless 产品体验】TDSQL-C MySQL Serverless最佳实践
  • SQLyog连接数据库报plugin caching_sha2_password could not be loaded......解决方案
  • linux应急排查
  • Apache POI及easyExcel读取及写入excel文件
  • 为什么写作
  • python基于VGG19实现图像风格迁移
  • BoredHackerBlog: Cloud AV RT日记
  • 数据结构之“初窥门径”
  • css:transform实现平移、旋转、缩放、倾斜元素
  • 如何理解AutoGPT
  • 【网络知识必知必会】聊聊网络层IP协议