技术标签: 面试 Android基础 android aapt 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
AAPT2 支持编译所有 Android 资源类型,如可绘制对象和 XML 文件。调用 AAPT2 进行编译时,每次调用都会传递一个资源文件作为输入。
然后,AAPT2 会解析该文件并生成一个扩展名为 .flat 的中间二进制文件。
在链接阶段,AAPT2 会合并在编译阶段生成的所有中间文件(如资源表、二进制 XML 文件和处理过的 PNG 文件),并将它们打包成一个 APK。
此外,在此阶段还会生成其他辅助文件,如 R.java 和 ProGuard 规则文件
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 | 提高输出的详细程度。 |
使用 diff 比较两个 APK 并确定它们之间的任何差异。
aapt2 diff first.apk second.apk
当然,我们也可以之间使用android studio进行对比,方法如下:将一个apk直接拖入studio窗口,然后在右上角会有一个compare 按钮
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
后面略
默认情况下,AAPT compile 命令会将资源编译为适合 APK 的二进制格式。
可通过指定 --proto-format,以指定适合 AAB 文件的 protobuf 格式。convert 命令可在这两种格式之间转换 APK
aapt2 convert -o output-file options file[,file[..]]
略
文章浏览阅读1.7k次。树的深度优先遍历有先根次序遍历和后根次序遍历,对应相应树的二叉链表表示的前序遍历和中序遍历,普通树没有中根次序遍历;森林有先根次序遍历和中根次序遍历,对应二叉链表表示的前序遍历和中序遍历;树和森林的广度优先遍历与二叉树的层次序遍历类似,它是非递归算法,需要借用一个队列来实现。_森林的深度遍历
文章浏览阅读2.2k次。 截止到目前为止,在redis官方的文档和实现里面并没有针对object 对象缓存的方法,然而,在我们的实际开发需要中,在很多时候我们是需要进行对象缓存的,并且可以正确的读取出来! 在笔者正在开发的红包项目中,针对每天红包就需要使用的对象缓存,并可以随时修改缓存对象中的..._redis缓存对象的实现原理
文章浏览阅读4.1k次。由于项目可以使用burp遍历邮箱,以发现邮箱有没有被注册,所以需要采用限制ip访问次数的方式来限制采集 //获取请求的ip地址 String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) ..._后端访问ip个数限制
文章浏览阅读302次。package org.lyq.dao;import java.io.IOException;import java.io.InputStream;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement..._经典数据库之间接口程序
文章浏览阅读9.9k次,点赞5次,收藏11次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
文章浏览阅读4.6k次。1.下载下载echart微信小程序demo和库echarts-for-weixin2.引入到微信小程序中1)创建一个新的快速启动模板微信小程序项目参考例子路由:/pages/index/index2)存放echart库须将demo所有的ec-canvas里面的文件复制到微信小程序目录里面本例子存放在根目录的lib里面 3)引入某页面的XXX.json,..._微信小程序入门echarts
文章浏览阅读8.2k次,点赞8次,收藏48次。接上一篇获取完股票代码信息后,我们打开东方财富网,一通瞎点,进到某股票的K线板块打开调试界面,XHR中并没有我们想要的数据,从网页数据加载来看应该不是实时资源的肯定有个传输的地方,我们先清空完所有Network的资源然后把鼠标放到K线上可以从后台再次获取传输数据,获取到数据立刻按按钮暂停获取,不然数据增多影响我们排查数据获取的Url,很快我们就可以查到JSON数据的url该JSON数据获取地址的url为:http://56.push2his.eastmoney.com/api/qt/stock/_stock.csv
文章浏览阅读129次。1.注册用post方式传用户名,密码,头像因为上传头像需要enctype=“multipart/form-data”然后接受post数据,建一个表单存放三个数据,头像用 mediumblob (以免撑爆)建立连接然后把数据存入数据库,先查重名然后存入,转跳主页2.登录先防止空密码,然后从数据库取出密码与输入密码对照若密码正确则将用户名设为session用户名,转跳lyb...
文章浏览阅读5.2k次,点赞3次,收藏10次。大行为:深度行为分析新时代的挑战和机遇_行为理解 深度学习
文章浏览阅读129次。进入Anaconda\DLLS目录,查看libssl-1_1-x64.dll的日期进入Anaconda\Library\bin目录,比较两者日期如果不一致,将DLLS中的替换bin中的再次尝试,ok_安装scikit-learn时 无法定位程序输入点
文章浏览阅读238次。∙\bullet∙Hello World的条件输出描述获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:如果输入值是0,直接输出"Hello World"..._输入10+100 1/20输出110.00 0.05
文章浏览阅读2.9k次,点赞4次,收藏43次。以前做stm32嵌入式开发均使用的是破解版的keil软件,现在工作需要无法按照此步骤进行,最近针对ST官方免费软件STM32CubeIDE进行了相关调研工作。1 STM32CubeIDE简介目前主流的STM32开发环境是ARM公司的KEIL软件, 由于KEIL对于STM32大部分型号是收费的, 使用需要破解, 存在版权问题。 并且使用KEIL编译大型工程, 编译太慢了, 编译耗时长。STM32CubeIDE是ST公司推出的免费多功能STM32开发工具,采用了行业标准的开放式许可条..._stm32cubeide免费吗