Android Studio包含一个APK分析器,可在构建过程完成后立即洞悉APK的组成。 使用APK分析工具可以减少您在应用中调试DEX文件和资源调试问题的时间,以及帮助减少APK大小。 使用Android Studio APK Analyzer,您可以完成以下操作:
- 查看APK中文件的绝对大小和相对大小(例如DEX和Android资源文件)。
- 了解DEX文件的组成。
- 快速查看APK中的文件的最终版本(例如
AndroidManifest.xml
)。 - 执行两个APK的并行比较。
当项目打开时,有三种方式访问APK分析器:
- 将APK拖动到Android Studio的 Editor 窗口中。
- 在项目窗口中切换到Project 透视图,然后双击默认目录
build/output/apks/
下的APK文件。 - 在菜单栏中Build > Analyze APK,然后选择您的APK。
重要:当分析调试版本时,使用通过选择 Build> Build APK 或gradle命令创建的APK。 单击工具栏中的运行将导致启用Instant Run启用APK,不应与APK分析器一起使用以进行优化任务 - 它们仅用于开发,并动态加载大多数资源。 即时运行APK可以通过嵌入在APK中的
instant-run.zip
文件来标识。
查看文件和大小信息
APK是遵循ZIP文件格式的文件。 APK分析器将每个文件或文件夹显示为具有可导航到文件夹的扩展功能的实体。 实体的层次结构反映APK文件中文件和文件夹的结构。
APK分析器显示每个实体的原始文件大小和下载文件大小值,如图1所示。原始文件大小表示磁盘上实体的解压缩大小,而下载大小表示实体的估计压缩大小, Google Play中下载的百分比表示实体APK 总下载大小的百分比。
图1. APK分析器中的文件大小
查看AndroidManifest.xml
如果您的项目包含多个AndroidManifest.xml
文件(如产品风格)或包含清单的库,则它们将合并到您的APK中的单个文件中。 这个清单文件通常是APK中的二进制文件,但是当在APK分析器中选择时,该实体的XML形式被重建和呈现。 此查看器可让您了解在构建过程中对应用程序所做的任何更改。 例如,您可以看到应用程序依赖的库中的AndroidManifest.xml
文件是如何合并到最终的AndroidManifest.xml
文件中的。
此外,此查看器提供一些lint功能,并在右上角出现警告或错误。 图5显示了为所选清单文件报告的错误。
图5. 所选清单文件在右边距中有一个图标时出现错误
查看代码和资源实体
各种构建任务更改APK文件中的最终实体。 例如,Proguard缩减规则文件可能会更改最终代码,并且图像资源可能会被产品风格中的资源覆盖。 使用APK分析工具轻松查看文件的最终版本:单击实体,并在文件列表下方显示上下文相关的文件视图,包括文本和图像实体的预览。
图2. 最终图像资源的预览
APK分析器还可以显示各种文本和二进制文件。 例如,resources.arsc实体查看器允许您查看特定于配置的值,如字符串资源的特定语言翻译。 在图3中,您可以查看每个字符串资源的翻译。
图3. 翻译的字符串资源的预览
查看DEX文件
APK分析器的DEX文件查看器可让您立即访问应用程序中DEX文件中的基本信息。 在查看器中提供类,包,总引用和声明计数,这可以帮助决定是使用多DEX还是如何去除依赖性以得到低于64k DEX限制。
图4描绘了接近64k DEX极限的中等大小的应用程序。 每个包,类和方法都包括在 “定义的方法” 和 “引用的方法” 列中列出的计数。 “引用的方法” 列计算DEX文件引用的所有方法。 这通常包括在您的代码中定义的方法,依赖库和代码使用的标准Java和Android包中定义的方法,这些是在每个DEX文件中计入64k方法限制的方法。 “定义的方法” 列仅计算在一个DEX文件中定义的方法,因此此数字是“参考方法”的子集。 请注意,当您在APK中打包依赖关系时,依赖关系中定义的方法会同时添加两个方法计数。 还要注意,在编译源代码之后,缩小和/或Proguard压缩也可以改变DEX文件的内容。
图4. 在APK Analyzer中使用multi-dex的应用程序
APK文件比较
APK分析器还可以比较两个不同APK文件中实体的大小。 与以前的版本相比,尝试了解应用程序的大小,这是有帮助的。
在发布更新的APK之前,请将要发布的APK版本加载到APK分析工具中。 然后点击APK分析器窗口右上角的比较。 在选择对话框中,找到上次发布给您的用户的APK,然后点击确定。 将出现类似于图6中的对话框,允许您比较更新对用户的影响。
图6显示了特定应用程序的调试版本和发行版版本之间的区别。 在这些构建类型之间使用不同的构建选项,这不同地改变了底层实体。
图6. 调试和发布APK之间的区别