AAPT2

AAPT2是Android资源打包工具,用于编译和打包应用资源。它支持增量编译,将资源编译为二进制格式并链接为APK。编译过程包括解析资源、编制索引和优化。链接阶段则合并编译文件生成APK,但不包含DEX和未签名。开发者可以从命令行使用AAPT2进行调试和构建。文章还提供了编译和链接的命令行选项及实践操作示例。

概念

AAPT2(Android 资源打包工具)是一种构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。
Android Gradle 插件 3.0.0 及更高版本在默认情况下会启用 AAPT2。您通常不需要自行调用 aapt2。不过,如果您更愿意使用自己的终端和构建系统而不是 Android Studio,则可以从命令行使用 AAPT2。您还可以从命令行调试与 AAPT2 相关的构建错误。为此,您可以在 Android SDK Build Tools 26.0.2 及更高版本中找到作为独立工具提供的 AAPT2。
如要从命令行下载 Android SDK Build Tools,请使用 sdkmanager 并运行以下命令:

sdkmanager "build-tools;build-tools-version"

一般来说,我们已经可以从Android studio中获取aapt2.exe,就不需要再进行下载了。

下载 SDK Build Tools 后,在 android_sdk/build-tools/version/ 下找到 AAPT2。
由于 Android SDK Build Tools 不常发布新版本,因此 SDK Build Tools 中包含的 AAPT2 可能不是最新版本。如需获取最新版 AAPT2,请参阅从 Google Maven 下载 AAPT2。
如需在 Linux 或 Mac 上从命令行使用 AAPT2,请运行 aapt2 命令。在 Windows 上,运行 aapt2.exe 命令。
AAPT2 支持通过启用增量编译实现更快的资源编译。为实现增量编译,资源处理被拆分为两个步骤:

编译:将资源文件编译为二进制格式。
链接:合并所有已编译的文件并将它们打包到一个软件包中。
这种拆分方式有助于提高增量编译的性能。例如,如果某个文件中有更改,您只需要重新编译该文件。

编译

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

编译指令

 aapt2 compile --dir .\res\ -o .\aapt\ --no-crunch --legacy

编译后的.flat文件
在这里插入图片描述
如果传递整个目录,则即使只有一项资源发生了改变,AAPT2 也会重新编译目录中的所有文件。虽然您可以使用 --dir 标记将包含多个资源文件的资源目录传递给 AAPT2,但如果这样做,您将无法获得增量资源编译的优势。
输出文件的类型可能会因您为编译提供的输入而异,如下表所示:
表 1. 编译的输入和输出文件类型

输入 输出
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/resource-type[-config]/file

在以下示例中,AAPT2 分别编译了名为 values.xml 和 myImage.png 的资源文件:

aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学知识拯救世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值