Android——NDK基础概念——ndk-build介绍

Android——NDK基础概念——ndk-build介绍

大家好,又见面了,我是全栈君。

ndk-build介绍:

ndk-build文件是Android NDK r4中引入的一个shell脚本。其用途是调用正确的NDK构建脚本。

内部构建:

运行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:移除以前生成的任意二进制文件;

V=1:启动构建,并显示构建命令;

-B:强制执行完全的重新构建;

-B V=1:强制执行完全的重新构建,并显示构建命令。

NDK_LOG=1:显示内部NDK日志消息(用于调试NDK本身)。

NDK_DEBUG=1:强制执行可调试版构建;

NDK_DEBUG=0:强制执行发布版构建;

NDK_HOST_32BIT=1:始终使用32位模式下的工具链;

NDK_APPLICATION_MK=<file>:使用NDK_APPLICATION_MK变量指向的特定Application.mk文件构建。

-C <project>:构建位于<project>的项目路径的原生代码。如果您不想在终端通过cd切换到该路径,则此选项非常有用。

可调试版与发布版构建:

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

表1、NDK_DEBUG(命令行)的结果和android:debuggable(清单)组合。

223236_M8pH_2888084.png 

*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生成的原生调试文件。

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位二进制文件。

要求:

一般情况下,您需要安装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>

转载于:https://my.oschina.net/cht2000/blog/899004

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108499.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 作为一个死忠粉,我的 IntelliJ IDEA 一直都是这样来设置的,效果很棒!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:judasn https://github.com/judasn/IntelliJ-IDEA-Tutorial…

    2021年6月25日
  • 大盘进入极度敏感区域

    大盘进入极度敏感区域《比技术面更重要的三个信息》,其中所说的三点都是凌驾于技术面的东西。非常重要,也必须时刻关注。如果股市变化通过看看K线,看看技术指标就能够掌握全局变化,那就是大笑话了。 现在,那篇评论里谈到的第一个问题就有了明显变化,美圆指数连续收出三根红K线,并且已有突破从09年3月形成的下降趋势的迹象。 和这个迹象紧密相连的另外一个变化就是石油、黄金价格持续下跌。这…

    2022年6月29日
  • js的匿名函数_匿名函数

    js的匿名函数_匿名函数1.函数的声明与函数表达式区别1.1函数的声明如下方法add就是函数声明的代码结构:functionadd(x,y){alert(x+y)}add(1,2)//弹窗显示:3关于函数声明,它最重要的一个特征就是函数声明提升,意思是执行代码之前先读取函数声明。不管函数声明写在前面,还是后面,都会出现函数声明的提升。如下代码可以正确执行:add(1,2…

    2022年10月4日
  • RJ45接口定义_rj45针脚顺序

    RJ45接口定义_rj45针脚顺序下面是[RJ45接口针脚定义(各种接口针脚定义)]的电路图RJ45接口信号定义,以及网线连接头信号安排以太网10/100Base-T接口:PinNameDescription1TX+TranceiveData+(发信号+)2TX-TranceiveData-(发信号-)3RX+ReceiveData+(收信号+)4n/cNotconnected(空脚)5…

    2022年9月15日
  • 【深度思考】郑州java培训机构排名

    【深度思考】郑州java培训机构排名前言分布式,是程序员必备技能之一,在面试过程中属于必备类的,在工作中更是会经常用到。而Kafka是一个分布式的基于发布订阅的消息队列,目前它的魅力是无穷的,对于Kafka的奥秘,还需要我们细细去探寻。要谈对Kafka有多熟悉,我相信还是阿里的大佬们最有发言权,所以今天分享的内容,就是Alibaba内部供应的“限量笔记”,关于Kafka的精髓全部写在这里面了,不得不感叹:不愧是Alibaba的技术官啊,真的服了!一、背景我们日常在电商网站购物时经常会遇到一些高并发的场景,例如电商App上经常出现的

    2022年10月3日
  • python中使用递归实现斐波那契数列

    python中使用递归实现斐波那契数列python中使用递归实现斐波那契数列python中使用递归实现斐波那契数列先来了解一下斐波那契数列(Fibonaccisequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N)在现代物理、

    2022年6月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号