APK解析器解析APK
Android Studio的APK解析器可以直接查看打包完成的apk的组成。APK解析器可以减少调试app内部的DEX文件和资源文件的时间,对减小APK的大小也有帮助。通过Android Studio的APK解析器,你可以完成如下功能:
---查看apk中文件的大小(如DEX文件和Android的资源文件)
---了解DEX文件的组成
---快速查看版本的文件(例如AndroidMainfest.xml文件)
---同时比较两个apk
当打开一个工程时,有三种打开APK分析器的方式
---直接将一个apk拖动到Android Studio的编辑器窗口
---在Project窗口中选择Project,然后双击build/output/apks/目录下的apk
---在菜单栏中选择选择Build > Analyze APK,然后选择要分析的apk
重要:当分析创建的apk时,通过Build>Build APK或者gradle的命令来创建apk。点击工具栏中的Run将会打开Instant Run,
注:打开分析器的三种方式
1.在编辑窗口下
将一个apk拖到编辑器区域,如MainActivity所在的区域,从电脑的G盘把facebook拖动到该区域
出现解析出的内容并点击可以查看相应的内容,如AndroidMainfest.xml文件
2.选择Project视图
双击build/output/apks/目录下的apk,然后出现APK解析器解析出的内容
3.工具栏中选择Build>Analyze APK
选中所要解析的APK
出现解析器界面
查看文件和大小信息
APK是zip格式的压缩包。APK解析器按APK的文件结构对文件夹和文件进行映射,并且可以查看每个文件夹和文件。
APK解析器显示了原始文件的大小和下载文件的大小。1.原始文件的大小是未经解压缩的文件大小,而下载大小是传送到Google Play时的压缩后文件的大概大小。总下载大小的%是占APK总的下载大小的百分比。
图1:文件解析器中文件的大小
查看AndroidMainfest.xml
如果你的项目包含多个AndroidMainfest.xml文件(例如多渠道情况下)或者所依赖的libraries中也包含mainfest文件,在生成的apk中这些mainfest文件将会被合并到一个文件中。mainfest文件在APK中通常是二进制文件,但是在APK解析器中查看时,这个XML文件将被重建来显示。查看器允许你查看创建过程中的所进行的任何改变。例如,你可以查看项目所依赖的library中的AndroidMainfest.xml是如何被合并到最终的AndroidMainfest.xml文件中的.
另外,可以在右上角查看警告和错误。图5为选中的mainfest文件中所上报的一个错误。
图5.所选择的mainfest文件中右上角有一个错误的图标
查看代码和资源
不同的apk创建方式会影响最终的APK中的文件。例如,Proguard中配置文件中删除无效代码(Shrinking rules)生成的最终APK的代码会改变,某个渠道中的图标资源也可能会被覆盖。通过APK解析器查看最终版本的apk中的文件变得更加容易:点击一个实体(解析器中可以点击的任何一项)与其相关的内容将会在下方列出来,如可以预览文件的内容、图片的内容。
图2.图片资源的预览
图片分析器也可以显示不同的文本和二进制文件。例如,实体resources.arsc的查看器可以查看配置中的特定文件,例如翻译的String文件。在图3中,你可以看见所翻译的每个String文件。
图3.翻译的String文件的预览
查看DEX文件
APK解析器的DEX文件查看器可以直接查看app中隐藏的DEX文件。查看器中可以查看类、包、引用和声明的总数量,对决定是否使用muli-DEX或者如何移除依赖以使DEX文件在64k之下(64k DEX limit:https://developer.android.com/studio/build/multidex.html)是很有帮助的。
图4描述了一个大小接近达到“DEX不超过64k”的限制的中型app。每个包、类、方法的数量都可以在Defined Method和Referenced Method的列里查看。Referenced Methods列展示了DEX文件中所有引用的方法的数量。这些是在代码中、依赖的libraries、单独的java和android包中定义的---这些被统计的方法的大小接近DEX文件的大小限制64k。Defined Methods这列只显示在DEX文件中定义的方法,所以数量是Referenced Methods的子集(感觉好像说反了,还是我理解错了)。需要注意的是当将APK中的依赖打包的时候,两列的方法数量都会增加。也应该注意到,压缩率和混淆文件的删除无用文件(Proguard shrinking)都会在编译源码时影响DEX文件的内容。
图4.使用了multi-dex的app
比较APK文件
APK解析器可以比较两个不同APK中的文件。对于找到这个版本为什么比上一个版本的apk的大小增加了的原因很有帮助。
在发布新的APK之前,从APK解析器中加载出你所要发布的APK的版本号。然后在APK解析窗口右上角点击Compare with.在弹出的窗口中,选择上次发布的最近一个版本的APK然后点击OK.如图6所示是一个与上一个弹窗类似的小点的弹窗显示的是可以进行对比的不同的文件。
图6显示了一个app的正式版和测试版之前的不同。不同的创建方式导致不同的创建类型,从而导致实体的不同。
注:
选中所要发布的apk,然后拖动到编辑区域,然后点击右上角的Compare With
然后弹出框中选择最近一次发布的版本的apk(也可以是任何需要比较的apk,我上一个版本的apk保存在目录E:\lastversion),然后点击OK
下面是可以对比的文件,old size是以前的,New Size是现在的
原文地址:https://developer.android.com/studio/build/apk-analyzer.html