Android Studio 2.2包含了APK Analyzer,通过它我们能够直观地看到APK的组成。使用APK Analyzer不仅能够减少你花在debug上的时间,而且还能减少你的APK大小。使用APK Analyzer,你能够实现:

  • 查看APK中文件的绝对大小和相对大小。(译注:相对大小指的是该文件占整个APK大小的百分比)

  • 理解DEX文件的组成。(译注:能看到DEX文件中包含了哪些类)

  • 快速查看APK中文件的最终版本(比如AndroidManifest.xml)。(译注:AndroidManifest.xml、resources.arsc本来是二进制形式显示的,APK Analyzer能够解析并显示这些文件的内容)

  • 对比两个APK。(译注:新版APK和旧版APK之间文件大小的差异)

这里有3种方法访问APK Analyzer:

  • 拖拽APK到Android Studio的编辑窗口。

  • 切换到Project视图,并且双击APK文件。

  • 在菜单栏中选择Build > Analyzer APK,并且选择APK。

注意:当使用APK Analyzer分析debug的APK,请使用Build > Build APK生成的APK。点击Run将会生成Instant Run的APK。APK Analyzer不能分析通过Instant Run生成的APK,判断APK是否是Intant Run生成的可以通过看APK中是否有instant-run.zip文件。

译注:APK Analyzer是让我们更有效地制定减包方案的实用工具,它能够让我们发现使得APK变大的元凶。

查看文件和大小信息

APK就是一个zip包。APK Analyzer显示每个文件或目录作为一个实体,实体的层级说明了APK文件的结构。

如图1,APK Analyzer对每个实体显示了raw file size和download file size。Raw File Size表示实体在磁盘中解压后的大小,而Download Size表示实体在Google Play中压缩后的大小。% of Total Download Size表示实体的download size占APK总的download size的百分比。

译注:图1中,最上面的5.8M是指APK在磁盘中的大小,而4.9M是指从Google Play中下载的大小。

图1:在APK Analyzer中的文件大小

译注:通过查看各个目录或文件的大小,我们能发现APK中哪个区域的文件太大了,比如如果dex太大,我们是不是引入了重复功能的第三方库(比如Glide和Fresco),或者抽取出一个精简的第三方库(精简ffmpeg库);如果res目录太大,我们可以看看哪些图片过大了,需要通过tinypng压缩,或者用webp代替。

查看AndroidManifest.xml

如果项目中包含了多个AndroidManifest.xml或者包含提供manifest文件的library,在APK中他们将被合并为一个manifest文件。在APK中manifest文件是普通的二进制文件,但是在APK Analyzer中查看manifest文件,该文件是以XML形式显示的。这种显示形式让我们能理解应用中的任何变化。比如,你能看到library中的AndroidManifest.xml是怎么合入最后的AndroidManifest.xml的。

另外,这种显示形式提供了lint的能力,会在右上角显示警告、错误提示。图2显示了manifest文件的错误提示。

图2:manifest文件的一个错误

查看代码和资源实体

不同的构建任务会改变APK文件最后的实体。比如混淆压缩规则能改变你最后的代码和图片资源。在APK Analyzer中能够快速查看文件的最终版本:点击实体,就能在下面看到文件的内容,包含文字和图片实体的预览。

图3:最终图片资源的预览

APK Analyzer也能展示文本或二进制文件。比如点击resources.arsc能够让你看到针对配置特定的值(例如一个字符串资源的特定语言的翻译)。如图4,你能看到每个字符串资源的翻译。

图4:翻译的字符串资源预览

查看DEX文件

APK Analyzer的DEX文件浏览器让你能够快速了解DEX文件的信息。我们能看到类、包、总的引用和声明个数,这些信息能够帮助我们决定是否使用multi-dex或者移除依赖使得满足64K方法数限制。

图5展示了一个中等大小的APP(方法数接近64K)。每个包、类、方法都列有Defined Method和Referenced Method。Referenced Method列是DEX文件中引用的全部方法,它包含了你定义的方法、依赖的library、定义在标准Java和Android包中的方法。Defined Method列只包含了定义在DEX文件中方法,因此它是Referenced Method方法的子集。注意当你引入一个依赖,在依赖中定义的方法会包含在Defined Method和Referenced Method中。还要注意,混淆压缩也会改变DEX文件的内容。

图5:一个使用了multi-dex的应用

比较APK文件

APK Analyzer能比较两个不同APK中各个实体的大小。这对于我们了解为何你的APP相比上个版本变大了是很有用的。

在发布一个新版APK之前,在APK Analyzer中导入你即将发布的APK。在右上角点击Compare With,选择上一个版本的APK,点击OK。然后就会出现类似图6的对话框,允许你比较之间的差别。

图6显示了一个APP的debug和release包的差别,不同的编译类型会导致实体的不同。

译注:Old Size是先选择的APK,New Size是后选择的APK。

图6:debug和release的APK之间的差别

转载于:https://www.cnblogs.com/yuezhusust/p/6905065.html

Android性能优化——使用 APK Analyzer 分析你的 APK相关推荐

  1. Android性能优化一绘制原理分析

    Android应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现. 1.卡顿的分类 按照场景分可以分为: UI绘制 绘制 刷新 应用启动 安装启动 冷启动 热启动 页面跳转 页面间切换 ...

  2. 【Android -- 性能优化】过度绘制分析工具 — GPU

    不断学习,做更好的自己!

  3. Android性能优化之APK瘦身详解(瘦身73%)

    image 公司项目在不断的改版迭代中,代码在不断的累加,终于apk包不负重负了,已经到了八十多M了.可能要换种方式表达,到目前为止没有正真的往外推过,一直在内部执行7天讨论需求,5天代码实现的阶段. ...

  4. Android 性能优化 之谈谈Java内存区域

    最近一年副业主要在学习投资和技能学习,把以前学习内存分析的一些笔记总结发出来,写了很多笔记总结都没有写完就又忙着了,最近再次总结复习学习一遍,还有提醒各位同学一定要学会投资.. 了解Android 内 ...

  5. Android 性能优化(62)---存检测、卡顿优化、耗电优化、APK瘦身——详解篇

    Android 性能优化,内存检测.卡顿优化.耗电优化.APK瘦身--详解篇 自2008年智能时代开始,Android操作系统一路高歌,10年智能机发展之路,如今 Android 9.0 代号P  都 ...

  6. Android性能优化——腾讯、字节、阿里、百度、网易等互联网公司项目实战+案例分析(附PDF)

    前言 当我们还在用按键.滑盖.翻盖手机的时候,全触屏手机来了; 当我们觉得二维码这项发明没有意义的时候,支付宝和微信等狠狠地给了我们响亮的耳光; 当我们以为扫码支付只有支付宝的时候,微信支付来了; 当 ...

  7. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )

    文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...

  8. Android性能优化之APK瘦身最全总结

    Android性能优化之APK瘦身最全总结 随着业务复杂度的逐渐增加,代码.资源也在不断的增加,此时你的APP大小也在增加.从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要 ...

  9. Android 性能优化 (一)APK高效瘦身

    Android 性能优化 (一)APK高效瘦身 http://blog.csdn.net/whb20081815/article/details/70140063 Android 性能优化 (二)数据 ...

最新文章

  1. WebViewJavascriptBridge的简单使用
  2. Android开发环境的搭建
  3. linux eclipse 配置c++开发环境,用Eclipse搭建C/C++开发环境
  4. springboot学习笔记一(从maven项目到springboot)
  5. dalvik对于Java方法调用的实现
  6. Android public class MyApplication extends MultiDexApplication使用
  7. Spark 基础 —— RDD(创建 RDD)的两种方式
  8. NavisWorks Api 简单使用与Gantt
  9. excel如何取消合并单元格并自动填充
  10. 2018 Multi-University Training Contest 3 hdu多校第三场 Problem A:Ascending Rating(单调队列)
  11. 电磁场与电磁波公式总结
  12. 总结!通过网站设置解决谷歌浏览器不能自动播放音频问题的方案
  13. 【实战】疾病-基因与图神经网络和图自动编码器的相互作用
  14. An error occurred: Cannot write to '/opt/apache-jmeter-5.2.1/bin/jmeterRes/Report1' as folder is not
  15. AS-GCN【复现】ModuleNotFoundError: No module named ‘processor.demo‘问题
  16. iphone6 适配和分辨率
  17. 糟糕!服务器被植入挖矿木马,CPU飙升200%
  18. 固定资产管理系统的一般操作流程
  19. 如何将道路地名及勾绘的矢量叠加到卫星影像上输出
  20. Mysql数据库(3)

热门文章

  1. python文件读取与输出_python基本文件操作(文件输入和输出)
  2. python用字典编写购物程序_Python编写购物小程序
  3. electron 打包 php,electron 将现有vue项目改成支持electron桌面端应用
  4. php作业案例10,5月23日作业——实例演示查询构造器中的10个最常用的方法
  5. 原平 计算机培训,原平编程培训,原平编程培训班,原平编程培训完找什么工作 - IT教育频道...
  6. mysql的hash分区_MySQL中hash和key分区值的计算方法
  7. 【AutoML】损失函数也可以进行自动搜索学习吗?
  8. 全球及中国海洋工程装备行业产值规模价值及投资风险预警报告2021-2027年版
  9. 中国油气装备行业发展状况与投资前景咨询报告2022-2028年版
  10. 消费扶贫谋定中国农民丰收节交易会 洛水山肴乡村振兴