关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。
目录
- 一、导读
- 二、概览
- 三、使用介绍
- 3.3 编译
- 3.2 链接
- 3.3 dump(转储) 命令
- 3.4 diff (差异)
- 3.5 optimize(优化)
- 3.6 convert (转换)
- 四、 推荐阅读
一、导读
我们继续总结学习基础知识,温故知新。
大致了解一下AAPT2,单独使用到的命令可能就dump(转储)多一些了。
二、概览
AAPT2(Android 资源打包工具)是一种构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源。
AAPT2 会解析资源、为资源编制索引,并将资源编译为针对 Android 平台进行过优化的二进制格式。
可从命令行下载 Android SDK Build Tools,或者android Studio中的 sdkmanager 进行下载,可单独运行aapt2命令。
正常来讲,我们可以在 \Android\Sdk\build-tools\xxxx 目录下看到aapt2
三、使用介绍
3.3 编译
AAPT2 支持编译所有 Android 资源类型,如可绘制对象和 XML 文件。调用 AAPT2 进行编译时,每次调用都会传递一个资源文件作为输入。
然后,AAPT2 会解析该文件并生成一个扩展名为 .flat 的中间二进制文件。
3.2 链接
在链接阶段,AAPT2 会合并在编译阶段生成的所有中间文件(如资源表、二进制 XML 文件和处理过的 PNG 文件),并将它们打包成一个 APK。
此外,在此阶段还会生成其他辅助文件,如 R.java 和 ProGuard 规则文件
3.3 dump(转储) 命令
dump 用于输出 APK 的信息。
aapt2 dump sub-command filename.apk [options]
例如:以下示例会输出所指定 APK 的资源表中的内容,
aapt2 dump resources output.apk
上面这个命令有什么用呢, 比如,我们在进行apk 优化时,通过分析apk中大图,这个时候,我们看到的是混淆后的资源名,
这个时候,我们就可以通过这个命令进行apk分析,会输出以下的一些信息,如:
resource 0x7f080005 drawable/abc_btn_to_on_mtrl_000
(mdpi) (file) res/ee9.png type=PNG
(hdpi) (file) res/5JC.png type=PNG
(xhdpi) (file) res/Yhg.png type=PNG
(xxhdpi) (file) res/FGd.png type=PNG
(xxxhdpi) (file) res/YWo.png type=PNG
resource 0x7f080006 drawable/abc_btn_to_on_mtrl_015
(mdpi) (file) res/TQp.png type=PNG
(hdpi) (file) res/06h.png type=PNG
(xhdpi) (file) res/0Ig.png type=PNG
(xxhdpi) (file) res/9Vg.png type=PNG
(xxxhdpi) (file) res/I3D.png type=PNG
resource 0x7f080007 drawable/abc_btn_material
() (file) res/yP5.xml type=XML
resource 0x7f08000b drawable/abc_btn_on_mtrl_000
(mdpi) (file) res/n_x.png type=PNG
(hdpi) (file) res/SrE.png type=PNG
(xhdpi) (file) res/BGR.png type=PNG
(xxhdpi) (file) res/9tt.png type=PNG
(xxxhdpi) (file) res/FYP.png type=PNG
这样就可以快速找到对应的资源,当然还有很多用处。
子命令 | 说明 |
---|---|
apc | 输出在编译期间生成的 AAPT2 容器(APC)的内容。 |
badging | 输出从 APK 的清单中提取的信息。 |
configurations | 输出 APK 中的资源使用的每项配置。 |
overlayable | 输出 APK 的可叠加资源。 |
packagename | 输出 APK 的软件包名称。 |
permissions | 输出从 APK 的清单提取的权限。 |
strings | 输出 APK 的资源表字符串池的内容。 |
styleparents | 输出 APK 中使用的样式的父项。 |
resources | 输出 APK 的资源表的内容。 |
xmlstrings | 输出 APK 的已编译 XML 中的字符串。 |
xmltree | 输出 APK 的已编译 XML 树。 |
转储选项
选项 | 说明 |
---|---|
–no-values | 禁止在显示资源时输出值。 |
–file file | 将文件指定为要从 APK 转储的参数。 |
-v | 提高输出的详细程度。 |
3.4 diff (差异)
使用 diff 比较两个 APK 并确定它们之间的任何差异。
aapt2 diff first.apk second.apk
当然,我们也可以之间使用android studio进行对比,方法如下:将一个apk直接拖入studio窗口,然后在右上角会有一个compare 按钮
3.5 optimize(优化)
optimize 用于在合并后的资源和 resources.arsc 被打包到 APK 之前对其运行优化。这项优化可将 APK 大小缩减约 1-3%,具体取决于所用资源的大小和数量。
aapt2 optimize options file[,file[..]]
例如:
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
示例会优化 input.apk 中的资源,并在 output.apk 中创建一个经过优化的新 APK
后面略
3.6 convert (转换)
默认情况下,AAPT compile 命令会将资源编译为适合 APK 的二进制格式。
可通过指定 --proto-format,以指定适合 AAB 文件的 protobuf 格式。convert 命令可在这两种格式之间转换 APK
aapt2 convert -o output-file options file[,file[..]]
略
AAPT2
四、 推荐阅读
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏