说明
通过Analyze APK这个功能,我们能够直观地看到APK的组成。你能够实现:
- 查看APK中文件的绝对大小和相对大小(相对大小指的是该文件占整个APK大小的百分比)
- 理解DEX文件的组成(能看到DEX文件中包含了哪些类)
- 快速查看APK中文件的最终版本(比如AndroidManifest.xml)(AndroidManifest.xml、resources.arsc本来是二进制形式显示的,APK Analyzer能够解析并显示这些文件的内容)
- 对比两个APK(新版APK和旧版APK之间文件大小的差异)
使用方法
1、Build-Analyze APK
2、选择一个apk即可
内容说明
APK就是一个zip包。APK Analyzer显示每个文件或目录作为一个实体,实体的层级说明了APK文件的结构
查看文件和大小信息
APK size是apk包的大小,download size是apk在Google Play上下载的apk包的大小(一个高度压缩的版本的文件)
通过查看各个目录或文件的大小,我们能发现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的
查看代码和资源实体
不同的构建任务会改变APK文件最后的实体。比如混淆压缩规则能改变你最后的代码和图片资源。在APK Analyzer中能够快速查看文件的最终版本:点击实体,就能在下面看到文件的内容,包含文字和图片实体的预览
APK Analyzer也能展示文本或二进制文件。比如点击resources.arsc能够让你看到针对配置特定的值(例如一个字符串资源的特定语言的翻译)。你能看到每个字符串资源的翻译,里面的文件的id值都是数值,它的内容就相当于是一个资源索引表
查看DEX文件
dex是Java源码编译生成的字节码文件,可以查看项目里面包含的所有类,可以查看每个类里面包含的方法,当然,混淆过的就查看不了了,只会显示方法名
我们能看到类、包、总的引用和声明个数,这些信息能够帮助我们决定是否使用multi-dex或者移除依赖使得满足64K方法数限制
可以看到这个dex文件定义了315个类2270种方法,并引用3946种方法
META-INF
这里存放的是apk的签名信息,MANIFEST.MF文件里面的内容是版本号以及对每一个文件的哈希值;CERT.SF文件里面的内容与MANIFEST.MF文件类似;CERT.RSA文件里面是apk包的签名,同时还有证书的公钥
libs
可以查看项目里面用到的so文件
比较apk文件
通过点击右上角的Compare with…可以选择多一个apk来比较,可以用来比较apk升级后的大小差别