ndk-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> 则指向 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
您可以使用以下选项:
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- 强制执行可调试的编译(详见表 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切换到该路径,此选项会非常有用。
可调试版编译与发布版编译
使用 NDK_DEBUG 选项,并在特定情况下通过 AndroidManifest.xml 指定调试版或发布版编译、优化相关行为以及是否包含符号。表 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
64 位和 32 位工具链
某些工具链同时随附了 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>
ndk-build官方使用说明的更多相关文章
- NDK Build 用法(NDK Build)
1.ndk-build的用法 Android NDKr4引入了一个新的.小巧的shell脚本ndk-build,来简化源码编译. 该文件位于NDK根目录,进入你的工程根目录或子目录之后,在命令行下调用 ...
- 〖Linux〗Clang/Clang++ for Android Binary/NDK build(二进制可执行文件/NDK编译)
#1. 下载并安装NDK(解压即可,目前最新版是r9c) http://developer.android.com/tools/sdk/ndk/index.html #2. 安装NDK独立编译工具 c ...
- Application.mk文件官方使用说明
本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...
- Android.mk文件官方使用说明
本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...
- InfluxDB(官方使用说明)
安装InfluxDB OSS 此页面提供有关安装,启动和配置InfluxDB的说明. InfluxDB OSS安装要求 root为了成功完成,需要安装InfluxDB软件包或具有管理员权限. Infl ...
- NDK开发—基础知识实战Demo
简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimenta ...
- Android 使用NDK编译sipdroid Library
sipdroid是一款开源的运行于Android平台上的voip,目前支持音频和视频通话: 项目拖管地址:http://code.google.com/p/sipdroid/ 下载源代码,导入ecli ...
- 无需cygwin,使用NDK进行开发
NDK从7开始自带编译器,在windows上无需配置cygwin的环境. 在eclips中配置NDK路径 在eclipse中点击菜单栏window-Perferences,配置NDK的路径. 在工程中 ...
- 使用NDK c++建立一个Android应用
使用NDK c++建立一个Android应用 一.工具 ADT(集成了eclipse,cdt,ndk plug-in) NDK (用它来编译c/c++程序) JDK (Java开发包) ANT(ecl ...
随机推荐
- [转]localhost、127.0.0.1和0.0.0.0和本机IP的区别
一.IP地址是什么 首先,我们要知道网络中的相互访问其实就是在进行两者间的数据传递.就如同送快递一样,快递发出只有知道你的住址信息,才能将快递送到你的手中.而在网络访问时,只有知道你在网络中的地址信息 ...
- Mysql读写分离操作
环境:两台centos环境,安装mysql(mariadb) web网站的优化: 缓存技术 数据库缓存 redis 文件缓存 图片 fastdfs 负载均衡 nginx 数据库主从备份,读写分离 图解 ...
- Centos7添加磁盘并分区格式化
1.安装前准备 [root@localhost ~]# yum install xfsprogs [root@localhost ~]# modprobe xfs [root@localhost ~] ...
- ubuntu18 安装坑点记录(华硕飞行堡垒)
环境 电脑:华硕飞行堡垒FX53VD 显卡:集成显卡+NVIDIA显卡(linux版本很不友好) 镜像:ubuntu18.04.3 LTS 准备安装 * 制作启动盘(百度) * 设置U盘启动项:按F2 ...
- 团队第五次——Alpha2的发布
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https:// ...
- JavaScript三种方法获取地址栏参数的方法
今天碰到要在一个页面获取另外一个页面url传过来的参数,一开始很本能的想到了用 split(“?”)这样一步步的分解出需要的参数. 后来想了一下,肯定会有更加简单的方法的!所以在网上找到了两个很又简单 ...
- dgango
一 mvc与mtv模型 web服务器开发领域里著名的mvc模式,所谓mvc就是把web应用分为模型(M),控制器(C),视图(V),以插件的形式,松耦合的方式连接在一起,模型负责业务对象与数据库的映射 ...
- java 的守护进程脚本
#!/bin/sh ] do Tag=`ps -ef|grep 'jar包名称'|grep -v grep|wc -l|awk '{printf $1"\n"}'` ] then ...
- Windbg Scratch Pad(便笺簿)窗口的使用
“便笺簿”窗口是一个剪贴板,您可以在其中键入和保存文本. 打开便笺簿 通过菜单View--->Scratch Pad 通过快捷键Alt+8 通过工具栏 使用便笺簿 用上面的方式打开的窗口如下: ...
- 基于react开发package.json的配置
项目依赖 react网页开发的3件套: react, react-dom, react-router-dom, redux, react-reduxreact的UI组件库: antd(pc端), an ...