AAPT2(Android 资源打包工具)是一个构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。

Android Gradle 插件 3.0.0 及更高版本默认情况下会启用 AAPT2,aapt2地址(/sdk_path/build-tools/version/aapt2)。

AAPT2 支持通过启用增量编译实现更快的资源编译。这是通过将资源处理拆分为两个步骤来实现的:

编译:将资源文件编译为二进制格式。

链接:合并所有已编译的文件并将它们打包到一个软件包中。

这种拆分方式有助于提高增量编译的性能。例如,如果一个文件发生了改变,则只需要重新编译这个文件。

编译

AAPT2 支持编译所有 Android 资源类型,如可绘制对象和 XML 文件。调用 AAPT2 进行编译时,每次调用都应传递一个资源文件作为输入。然后,AAPT2 会解析该文件并生成一个扩展名为 .flat 的中间二进制文件。

输入

输出

XML 资源文件(如 String 和 Style),它们位于 res/values/ 目录下。

以 *.arsc.flat 作为扩展名的资源表。

其他所有资源文件。

除 res/values/ 目录下的文件以外的其他所有文件都将转换为扩展名为 *.flat 的二进制 XML 文件。此外,默认情况下,所有 PNG 文件都会被压缩,并采用 *.png.flat 扩展名。如果选择不压缩 PNG,您可以在编译期间使用 --no-crunch 选项。

AAPT2 输出的文件不是可执行文件,稍后您必须在链接阶段添加这些二进制文件作为输入来生成 APK。但是,所生成的 APK 文件不是可以立即部署在 Android 设备上的可执行文件,因为它不包含 DEX 文件(已编译的字节码)且未签名。

编译语法:compile

aapt2 compile path-to-input-files [options] -o output-directory/

复制代码

path-to-input-files必须符合path/resource-type[-config]/file.

错误示例:G:\Decompile\aapt\colors.xml

运行会报错:error: invalid file path 'G:\Decompile\aapt\colors.xml'.

正确示例:G:\Decompile\aapt\res\values\colors.xml

.\aapt2.exe compile G:\Decompile\aapt\res\values\colors.xml -o G:\Decompile\aapt\

复制代码

会在目录文件夹下生成values_colors.arsc.flat文件。

编译选项

选项

说明

-o path

指定已编译资源的输出路径。这是一个必需的标志,因为您必须指定 AAPT2 可将已编译的资源输出并存储到其中的目录的路径。

--dir directory

指定要在其中搜索资源的目录。虽然您可以使用此标志通过一个命令编译多个资源文件,但这样就无法获得增量编译的优势,因此不建议对大型项目使用。

--pseudo-localize

生成默认字符串的伪本地化版本,如 en-XA 和 en-XB。

--no-crunch

停用 PNG 处理。

--legacy

将使用早期版本的 AAPT 时允许的错误视为警告。

-v

启用详细日志记录。

链接

在链接阶段,AAPT2 会合并在编译阶段生成的所有中间文件(如资源表、二进制 XML 文件和处理过的 PNG 文件),并将它们打包成一个 APK。此外,在此阶段还会生成其他辅助文件,如 R.java 和 ProGuard 规则文件。不过,生成的 APK 不包含 DEX 字节码且未签名。

链接语法:link

aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

复制代码

示例

aapt2 link -o output.apk -I android_sdk/platforms/android_version/android.jar compiled/res/values_values.arsc.flat compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v

复制代码

链接选项

选项

说明

-o path

指定链接的资源 APK 的输出路径。必须指定。

--manifest file

指定要构建的 Android 清单文件的路径。必须指定。

-I

如果您要在资源文件中使用带有 android 命名空间(例如 android:id)的属性,则必须使用此标志。

--java directory

指定要在其中生成 R.java 的目录。

--min-sdk-version min-sdk-version

设置要用于 AndroidManifest.xml 的默认最低 SDK 版本。

--target-sdk-version target-sdk-version

设置要用于 AndroidManifest.xml 的默认目标 SDK 版本。

--version-code version-code

指定没有版本代码时要注入 AndroidManifest.xml 中的版本代码(整数)

--compile-sdk-version-name compile-sdk-version-name

指定没有版本名称时要注入 AndroidManifest.xml 中的版本名称。

-v

可提高输出的详细程度

转储

dump 用于输出有关从 link 命令生成的 APK 的资源和清单信息。使用 dump 将信息输出到控制台。

转储语法

aapt2 dump [subcommand] filename.apk [options]

复制代码

subcommand

选项

说明

apc

Print the contents of the AAPT2 Container (APC) generated fom compilation.

badging

输出从APK清单中提取的信息

configurations

输出APK使用的配置信息

packagename

输出包名

permissions

输出APK中使用到的权限信息

strings

输入资源表常量池的信息

styleparents

Print the parents of a style in an APK.

resources

输出资源表的信息

xmlstrings

输出编译后的常量池

xmltree

输入编译后的xml树

转储选项

选项

说明

--no-values

禁止在显示资源时输出值。

--file file

将文件指定为要从 APK 转储的参数。

-v

提高输出的详细程度。

结尾

android aapt插件化,Android APK文件(三、AAPT2工具使用)相关推荐

  1. android 禁止插件化,Android 插件化实现方式(Hook)

    一.首先我们要找到Hook的点 1. 分析 我们先大概看下activity的启动流程(图片来自Android 插件化开发指南) image 当我们调用startActivity的时候,AMS对我们要启 ...

  2. android中的插件开发框架,设计并开发一个 Android 的插件化框架

    结合动态加载系列文章的分析,现在开始设计并开发一个 Android 的插件化框架,命名为 Frontia.Frontia 有 "前端" 的意思,寓意着 Android 插件能像前端 ...

  3. 【Android Gradle 插件】Android Plugin DSL Reference 离线文档下载 ( GitHub 下载文档 | 查看文档 )

    文章目录 一.Android Plugin DSL Reference 文档下载 二.Android Plugin DSL Reference 文档查看 一.Android Plugin DSL Re ...

  4. android导出apk文件_Android测试工具入门介绍(三)

    介绍一款牛逼的测试框架Drozer,一款可以检测Android一些公共漏洞的工具(可能远不止这些.还可以继续挖掘),还可以生成shellcode,进行安卓设备的远程exploit. 附下载地址:htt ...

  5. 携程Android App插件化和动态加载实践

    转载自:http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading?email=947091870@qq.com 编者按:本文为携程无 ...

  6. 【android】插件化技术原理详解

      作为移动端的黑科技,插件化技术一直受大厂的青睐.插件化技术有减少宿主Apk体积,可以独立更新,模块化开发等优点,让宿主APP极具扩展性.那么,现在就来聊聊其中的技术实现,国际惯例,先上效果图 这篇 ...

  7. android contentprovider 插件化之一

    ------本文转载自 Android插件化原理解析--contentprovider的插件化      这一系列的文章实在是写的好! 1, 概述 目前为止我们已经完成了Android四大组件中 Ac ...

  8. Android之插件化开发

    个人认为: 2017年手淘Atlas插件化项目的开源标志着插件化的落幕, 2018年Android 9.0上私有API的限制几乎称得上是要退出历史主流. 如今的插件化技术朝两个方向发展: 其一,插件化 ...

  9. 酷狗 Android App 插件化实施过程

    什么是插件化框架     插件化框架可以在主程序不重新安装的情况下,针对单个业务模块进行加载达到模块更新的目的,整个加载更新过程,对用户来说也是无感知的.     正式因为这样,新需求比起传统更新方式 ...

最新文章

  1. Java反射最佳实践
  2. Spring Boot配置@spring.profiles.active配置
  3. 此内容不能显示在一个框架中 ie_Chromium Edge中的IE兼容模式 与我们设想的有些不一样...
  4. mysql 表 地图_报表中的地图怎么做?
  5. C# 获取Excel中的合并单元格
  6. objective-C CollectionView 加深(添加注册头部View)
  7. vue取通过key取value_如何通过获取map中的key来获得与key对应的value值,进行运算...
  8. HTML5大气外贸鞋子在线商城网站源码
  9. 读 利用python进行数据分析 后感
  10. Ubuntu18.04安装OpenCV4.3.0和环境配置(支持编译CUDA并安装配置python-opencv)
  11. paip.命令行执行js
  12. Hyper-V 2016 系列教程56 SCVMM 2016 Client的安装
  13. C语言斐波那契数列部分问题程序求解过程,两种思想
  14. pspice仿真之波形频率等的测量方法
  15. Leetcode 995. Minimum Number of K Consecutive Bit Flips
  16. 怎么在电脑设置html,电脑怎么定时开机
  17. Android setLayoutparams失效几个原因
  18. 《一年学完mit计算机课程》,用了这种学习方法,他一年学完了33门MIT计算机课程...
  19. 戴尔Precision M6800加装西部数据NVMESSD-SN52固态硬盘 装4G模块
  20. 最长子序列(LCS, LIS, LCIS)

热门文章

  1. 条形码录入测试软件,ERP软件测试中条形码测试
  2. 计算着色器(Compute Shaders)
  3. Java多线程分批处理数据
  4. android7wifi怎么分享,教你如何设置安卓手机共享wifi信号教程
  5. 3D虚拟实景互动看房系统提供临场般的交互体验
  6. 关于ES集群信息的一些查看
  7. CCSP评估测试你能考多少分?(文末有答案)
  8. 如何用技术改变生活 哪个瞬间你突然觉得读书真有用?
  9. 图像格式RGB与BGR互转
  10. teamspeak搭建_关于teamspeak3搭建云服务器教程