前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【译】使用 APK Analyzer 分析你的 APK

【译】使用 APK Analyzer 分析你的 APK

作者头像
腾讯Bugly
发布于 2018-03-23 08:43:53
发布于 2018-03-23 08:43:53
2.6K0
举报
文章被收录于专栏:腾讯Bugly的专栏腾讯Bugly的专栏

本文来自“天天P图攻城狮”公众号(ttpic_dev)

本文是对 《Analyze Your Build with APK Analyzer》 的翻译。

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之间的差别


如果您觉得我们的内容还不错,就请转发到朋友圈,和小伙伴一起分享吧~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯Bugly 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android减包 - 减少APK大小
本文是对Google官方文档 Reduce APK Size 的翻译 用户经常会避免下载看起来体积较大的应用,特别是在不稳定的2G、3G网络或者在以字节付费的网络。这篇文章描述了怎样减少你的APK大小,这会让更多的用户愿意下载你的应用。 理解APK的结构 在讨论怎样减少应用大小之前,先了解APK的结构是有用的。一个APK文件就是ZIP包,其中包含了组成你的应用的所有文件,比如Java类文件,资源文件,和一个包含被编译资源的文件。 一个APK包含了以下目录: META-INF/: 包含CERT.SF和CERT
天天P图攻城狮
2018/02/02
1.9K0
Android减包 - 减少APK大小
实现Android APK瘦身99.99%
让我们将这一原则应用到 Android App 开发中。我们将玩转一个称为“ApkGolf”的 APK,目的是创建一个尽可能具有最少字节数的 App,并可安装在运行 Oreo 的设备上。
Android技术干货分享
2019/06/13
1.9K0
APK瘦身-是时候给App进行减负了!
APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装。前一段时间我司某一App进行APK的瘦身,最终也达到了减小10M的目标,现做一个简单的总结记录。
Android技术干货分享
2019/08/27
1.2K0
APK瘦身-是时候给App进行减负了!
Android 构建过程分析
QQ音乐技术团队
2017/11/08
3.3K12
Android 构建过程分析
Android性能优化之APK瘦身详解(瘦身73%)
首先上传一张瘦身前通过Analyze app分析出来的图片(打开方式:Android Studio下 ——> Build——> Analyze app):
Android技术干货分享
2019/06/03
1.1K0
Android dex文件64k限制解决办法
随着安卓平台的不断发展与壮大,市场上大而全的应用比比皆是,产品需求的变更累积和UI交互的极致追求,除了 resources 文件的俱增,在 Android Project 中依赖的 Library 和 自己写的 Java 代码也会越来越多。这些变化,除了会导致打包出的 APK 文件越来越大之外,当项目中java代码包含的方法数(method count)超出一个峰值时,编译过程中就会出现如下错误:
用户9227784
2021/12/21
1.2K0
APK 瘦身优化
官网:https://ibotpeaches.github.io/ApkTool apktool d students.apk
Yif
2020/04/23
1.4K0
APK 瘦身优化
APK打包过程aapt打包过程
Android系统定义了一套通用资源,这些资源可以被应用程序引用。例如,我们在XML布局文件中指定一个LinearLayout的android:orientation属性的值为“vertical”时,这个“vertical”实际上就是在系统资源包里面定义的一个值。
用户2929716
2018/08/23
1.9K0
APK打包过程aapt打包过程
APK逆向工程
APK(android Application PacKage)文件是安卓app的安装文件,其实就是一个zip或rar压缩包,把apk后缀改为zip,即可解压得到一堆安卓相关文件。
李小白是一只喵
2020/11/24
1.2K0
APK逆向工程
Freeline--Android平台上的秒级编译方案
Freeline 技术揭秘 Freeline是什么? Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部开源,稳定性方面:完善的基线对齐,进程级别异常隔离机制。性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速效果,另外在class及dex,resources层面作了相应缓存策略,做到真正增
xiangzhihong
2018/02/05
1.2K0
Freeline--Android平台上的秒级编译方案
Android App瘦身实战
随着业务的快速迭代增长,不断引入新的业务逻辑代码、图片资源和第三方SDK等,很多app都面临一个一个结果,app越来越大,甚至很多无用的代码,包体积的增大带来了很多问题,诸如app启动更慢,代码维护越
xiangzhihong
2018/02/06
1.7K0
Android App瘦身实战
【连载】聊聊 APK(三) —— Android 资源编译的秘密
上两期我们讲了 APK 里面 Dex 的东西,明白了 Dex 只是 classes 的某种打包形式,我们暂时不拘泥于细节,关于代码的部分就告一段落。我们知道除了代码,一个应用里,资源占用了相当大的一部分。
程序亦非猿
2019/08/16
1.3K0
【连载】聊聊 APK(三) —— Android 资源编译的秘密
移动安全(二)|APK打包流程及签名安全机制初探
切入正题,胡小毛在学习Android逆向的过程中又有所总结,先来看看apk文件结构:
用户1631416
2020/03/12
1.1K0
你必须要懂的APK瘦身知识
作者:我是吸血鬼 链接:https://www.jianshu.com/p/5921e9561f5f 著作权归作者所有,欢迎投稿。 随着业务复杂度的逐渐增加,代码、资源也在不断的增加,此时你的APP大小也在增加。从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要下载,不下载你就可能因此失去了一个用户。从公司层面来讲,流量就是钱,减少APP的大小就显得尤为重要。从开发者层面上来讲,你掌握了这个手艺也会略显逼格满满。 废话不多说了,开始正题。 1.APK结构的那些事 知己知彼,方能百
用户1269200
2018/06/22
7930
Android插件化基础3----Android的编译打包流程详解
.apk文件其实就是一个压缩包,把文件的后缀改成.zip,用压缩软件解压搜就可的下图(我是mac)
隔壁老李头
2018/08/30
2.2K0
Android插件化基础3----Android的编译打包流程详解
Android软件汉化教程--自己动手做.apk汉化
.apk文件实际是一个zip压缩包,可以通过解压缩工具解开.apk文件。
coffee1
2024/10/12
6000
Android软件汉化教程--自己动手做.apk汉化
Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之
xiangzhihong
2018/02/01
3.1K0
Android逆向分析(2) APK的打包与安装背后的故事
深入探索 APKTool:Android 应用的反编译与重打包工具
apktool 是一个非常强大的工具,用于反编译和重新打包 Android 应用程序(APK 文件)。这个工具主要用于应用程序的逆向工程,调试,以及修改已经编译的 APK 文件。本文将详细解释 apktool 的工作原理和使用过程。
陆业聪
2024/10/18
1.2K0
深入探索 APKTool:Android 应用的反编译与重打包工具
Matrix-ApkChecker — Apk 分析减包利器
简介 Matrix 是微信终端自研和正在使用的一套 APM(应用性能管理)系统。 Matrix-ApkChecker 作为 Matrix 系统的一部分,是针对 android 安装包的分析检测工具,根据一系列设定好的规则检测 apk 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。 功能 Matrix-ApkChecker 当前主要包含以下功能 1. 读取 manifest 的信息 从 AndroidManifest.xml 文件中读取 apk 的全局信息,如 packag
微信终端开发团队
2018/11/30
4.6K2
Matrix-ApkChecker — Apk 分析减包利器
(Mac)反编译Android APK详细操作指南[ApkTool,dex2jar,JD-GUI]
早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章,我在该文章中对如何在Windows平台反编译APK做了讲解,如今用Mac系统的同学越来越多,也有很多朋友问我能否出一篇关于
CrazyCodeBoy
2018/05/15
3.5K0
相关推荐
Android减包 - 减少APK大小
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档