AAPT2简介

关于作者: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
AAPT2简介_第1张图片

三、使用介绍

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 按钮

AAPT2简介_第2张图片

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学习专栏

ddd

你可能感兴趣的:(Android基础,android,面试,aapt,aapt2)