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官方使用说明的更多相关文章

  1. NDK Build 用法(NDK Build)

    1.ndk-build的用法 Android NDKr4引入了一个新的.小巧的shell脚本ndk-build,来简化源码编译. 该文件位于NDK根目录,进入你的工程根目录或子目录之后,在命令行下调用 ...

  2. 〖Linux〗Clang/Clang++ for Android Binary/NDK build(二进制可执行文件/NDK编译)

    #1. 下载并安装NDK(解压即可,目前最新版是r9c) http://developer.android.com/tools/sdk/ndk/index.html #2. 安装NDK独立编译工具 c ...

  3. Application.mk文件官方使用说明

    本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...

  4. Android.mk文件官方使用说明

    本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...

  5. InfluxDB(官方使用说明)

    安装InfluxDB OSS 此页面提供有关安装,启动和配置InfluxDB的说明. InfluxDB OSS安装要求 root为了成功完成,需要安装InfluxDB软件包或具有管理员权限. Infl ...

  6. NDK开发—基础知识实战Demo

    简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimenta ...

  7. Android 使用NDK编译sipdroid Library

    sipdroid是一款开源的运行于Android平台上的voip,目前支持音频和视频通话: 项目拖管地址:http://code.google.com/p/sipdroid/ 下载源代码,导入ecli ...

  8. 无需cygwin,使用NDK进行开发

    NDK从7开始自带编译器,在windows上无需配置cygwin的环境. 在eclips中配置NDK路径 在eclipse中点击菜单栏window-Perferences,配置NDK的路径. 在工程中 ...

  9. 使用NDK c++建立一个Android应用

    使用NDK c++建立一个Android应用 一.工具 ADT(集成了eclipse,cdt,ndk plug-in) NDK (用它来编译c/c++程序) JDK (Java开发包) ANT(ecl ...

随机推荐

  1. iOS应用开发应遵循的10条设计原则

    转自:http://mobile.51cto.com/design-309719.htm 1.操控便捷 iOS应用的控制设计应该具有圆润的轮廓和程式化的梯度,操作便捷. 2.结构清晰.导航方便 充分利 ...

  2. bugku——蹭网先解开密码(EWSA,hashcat破解wifi握手包)

    题目地址:http://ctf.bugku.com/files/77decd384a172b9a2294e6c6acfd48cc/wifi.cap 下载是个.cap的文件,破解过wifi的童鞋肯定知道 ...

  3. Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)

    0x00 漏洞描述 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003.windows2008.windows2008 R2.windows ...

  4. Linux Firewalld 基础介绍

    互联网上提供了各种网络服务,而防火墙可以设置各种规则来限制访问,保护服务器. 概述 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙. Linux系 ...

  5. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  6. hadoop hdfs 有内网、公网ip后,本地调试访问不了集群解决

    问题背景: 使用云上的虚拟环境搭建测试集群,导入一些数据,在本地idea做些debug调试,但是发现本地idea连接不上测试环境 集群内部配置hosts映射是内网映射(内网ip与主机名映射),本地只能 ...

  7. XGBoost 参数介绍

    XGBoost 的设置有三种参数:一般参数,提升参数和学习参数. 一般参数 取决于提升器,通常是树或线性模型提升参数 取决于选择的提升器的相关参数学习参数 取决于指定学习任务和相应的学习目标一般参数 ...

  8. Traefik HTTPS 配置

    参考 add-a-tls-certificate-to-the-ingress Entry Points Definition 使用traefik作为ingress controller透出集群中的h ...

  9. bert模型参数简化

    我们下载下来的预训练的bert模型的大小大概是400M左右,但是我们自己预训练的bert模型,或者是我们在开源的bert模型上fine-tuning之后的模型的大小大约是1.1G,我们来看看到底是什么 ...

  10. django 基础1

    1.web应用 本质是基于socket实现的应用程序 浏览器---------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态 请求协议 浏览器--- ...