AAPT2简介

简介: AAPT2简介
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

在这里插入图片描述

一、导读

我们继续总结学习基础知识,温故知新。

大致了解一下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学习专栏]

ddd

相关文章
|
2月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
Java Android开发 C++
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
569 0
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
|
Android开发 C语言
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
367 0
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
|
Android开发
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
402 0
|
XML 安全 Java
【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
971 0
【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )
|
Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
155 0
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
|
Java Android开发
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(三)
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(三)
243 0
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(三)
|
缓存 Java 开发工具
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(一)
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(一)
248 0
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(一)
|
存储 Java 开发工具
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(二)
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(二)
191 0
【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )(二)
|
Ubuntu Android开发 数据安全/隐私保护
【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )(二)
【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )(二)
281 0
【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )(二)