(九)Android 性能优化 APK 分析器

小酌鸡汤

人生在勤,不索何获。

本文来源《Android 性能优化 全家桶》

什么是APK 分析器 ?

 Android Studio 包含一个 APK 分析器,可让您在构建流程完成后立即了解 APK 的组成。使用 APK 分析器可以减少调试应用的 DEX 文件和资源相关问题所用的时间,并且有助于减小 APK 的大小。

APK 分析器可以干什么 ?

  • 查看 APK 中的文件(如 DEX 和 Android 资源文件)的绝对大小和相对大小。
  • 了解 DEX 文件的组成。
  • 快速查看 APK 中的文件(如 AndroidManifest.xml 文件)的最终版本。
  • 对两个 APK 进行并排比较。

现在,就一起实操体验 APK分析器 ~

(1)访问 APK 分析器:
  • 将 APK 拖动到 Android Studio 的 Editor 窗口中。
  • 在 Project 窗口中切换到 Project 透视图,然后在默认的 build/output/apks/ 目录中双击相应 APK。
  • 在菜单栏中依次选择 Build > Analyze APK,然后选择您的 APK。
(2)查看文件和大小信息
APK 分析器中的文件大小

 APK 是遵循 ZIP 文件格式的文件

  • Raw File Size:表示实体在磁盘上未经压缩时的大小
  • Download Size:则表示实体由 Google Play 提供时的压缩后大小的估计值
  • % of Total Download Size: 表示实体占 APK 总下载大小的百分比
(3)查看清单文件(AndroidManifest.xml)
APK 清单文件
  • 在APK中,多个清单文件会最终合并成一个
  • 清单文件在 APK 中通常是二进制文件,但在 APK 分析器中会以XML格式显示
  • 查看器还提供了一些 Lint 功能,并且会在右上角显示相关警告或错误
(4)查看 DEX 文件
APK DEX文件

 查看器中提供了类、软件包、总引用和声明计数

  • Defined Methods:仅统计在某一个 DEX 文件中定义的方法,所以此数字是 Referenced Methods 的子集
  • Referenced Methods:会统计 DEX 文件引用的所有方法。这通常包括在您的代码和依赖项库中定义的方法,以及在代码使用的标准 Java 和 Android 软件包中定义的方法 - 这些方法计入每个 DEX 文件中的 64k 方法限制
  • Size: 对应的文件大小
(5)过滤 DEX 文件树状视图(参考上面DEX文件图)

 在 Class 列表正上方,APK 分析器提供了用于查看选定 DEX 文件内容的过滤器。要使用过滤器来显示某个类中的所有方法和字段,请执行以下操作:

  1. File 列表中,选择 classes.dex 文件。
  2. Class 列表中,导航到一个类并选择该类。
  3. 展开您选择的类。
  4. 切换 Show fields 图标以显示或隐藏类字段。
  5. 切换 Show methods 图标以显示或隐藏类方法。
  6. 切换 Show all referenced methods or fields 图标以显示或隐藏引用的软件包、类、方法和字段。在树状视图中,斜体节点是在选定 DEX 文件中没有定义的引用。
    DEX 文件可以引用在其他文件中定义的方法和字段。例如,System.out.println() 是对 Android 框架中的 println() 方法的引用。
(6)加载 ProGuard 映射(参考上面DEX文件图)

 过滤器图标旁边是 ProGuard 映射图标。它们处于灰显状态,直到您加载一组 ProGuard 映射文件来向 DEX 查看器添加一些功能,如对名称进行反混淆处理 (mapping.txt)、显示已移除的节点 (usage.txt),以及指示无法移除的节点 (seeds.txt)。您导入的 ProGuard 映射文件的构建版本必须与启用了代码缩减功能后生成的 APK 的构建版本相同。

APK DEX加载ProGuard映射

要加载 ProGuard 映射文件,请执行以下操作:

  1. 点击 Load Proguard Mappings
  2. 导航到包含映射文件的项目文件夹,然后加载所有文件、文件的任意组合或包含文件的文件夹。
  3. 映射文件通常位于project/app/build/outputs/mappings/release/。如果文件选择器检测到此项目结构,会默认选择 release 文件夹。文件选择器会检查与 mapping.txtseeds.txtusage.txt 完全匹配的文件名。
  4. 以下列表介绍了映射文件:
  • seeds.txt:ProGuard 配置阻止在压缩过程中移除的节点以粗体显示。
  • mapping.txt:启用 Deobfuscate names(点击图标),以便恢复由 R8 进行了混淆处理的节点的原始名称。例如,可以将 abc 之类进行了混淆处理的节点名称恢复为 MyClassMainActivitymyMethod()
  • usage.txt:启用 Show removed nodes(点击图标),以便显示 R8 在压缩过程中移除的类、方法和字段。恢复的节点带删除线。
APK DEX加载ProGuard映射之Usage示例
有何感受?映射文件就像一把钥匙,定位编译器优化的细节。
(6)显示字节码、查找用法以及生成 Keep 规则

 右键点击 Class 列表视图中的任意节点即可显示其上下文菜单。Class 列表视图中的节点具有一个上下文菜单。

APK DEX 上下文菜单
(6.1)Show bytecode

 对选定的类、方法或字段进行反编译,并在对话框中显示 smali 字节码(而不是 Java 代码)表示形式。

APK DEX 显示字节码
(6.2)Find usages

 显示 DEX 代码的哪些其他部分对选定的类或方法进行了引用。如果加载了 seeds.txt,以粗体显示的节点表示 Proguard 配置阻止在压缩过程中移除这些节点。

APK DEX 查找用法
(6.3)Generate Proguard Keep rule

 显示您可以复制并粘贴到项目 Proguard 配置文件中的 Proguard 规则,这些规则可阻止在代码缩减阶段移除给定的软件包、类、方法或字段。

APK DEX 生成keep规则
有何感受?还在为自己不会写混淆文件而发愁吗?别人都帮我们写好了。
(7)查看代码和资源实体

 使用 APK 分析器可以轻松查看文件的最终版本:只需点击相应实体,下方便会显示文本或图片实体的预览。

APK 查看资源实体

 APK 分析器还可以显示各种文本和二进制文件。例如,在 resources.arsc 实体查看器中,您可以查看配置专用的值,如字符串资源的语言翻译。

APK 查看资源文本
有何感受?语言的横向对比器有木有,快速检查我们的多语言问题。
(8)比较 APK 文件

 APK 分析器可以比较两个不同 APK 文件中的实体大小。当您需要了解为什么您的应用较之先前版本有所增大时,这非常有用。在发布经过更新的 APK 之前,请执行以下操作:

  1. 将要发布的 APK 版本加载到 APK 分析器中。
  2. 点击 APK 分析器右上角的 Compare With。
  3. 在选择对话框中,找到上次向用户发布的 APK,然后点击 OK。
APK 大小比较
有何感受?每个里程碑的发布版本对比,清晰了解增减量,更好把控品质。
(9)小发现-依赖树的生成
APK 依赖树的生成
一起来查看自己的apk吧~


小编的扩展链接

参考链接

只有天在上,更无山与齐

举手之劳,赞有余香! ❤ 比心 ❤

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,431评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,637评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,555评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,900评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,629评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,976评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,976评论 3 448
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,139评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,686评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,411评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,641评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,129评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,820评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,233评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,567评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,362评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,604评论 2 380