APP开发实战171-使用APK Analyzer分析APP

时间:2022-07-04 04:18:46

27.1.4 使用APK Analyzer分析APP

27.1.4.1 APK Analyzer简介

Android Studio自带了一个APK分析工具:APK Analyzer,可以使用它查看编译后的APK文件的组成,可用于解决APP中的DEX文件和资源文件问题,也有助于减少APK的所占的存储空间。

使用APK Analyzer,开发人员可以:

    查看APK中包含的文件的绝对和相对大小(相对大小指的是该文件占整个APK大小的百分比)

    查看DEX文件的组成

    查看文件的最终版本(如AndroidManifest.xml文件)

    比较两个APK中包含的文件大小

    有三种方式启动APK Analyzer:

    直接把APK拖到Android Studio的编辑窗口

    切换工程到Project视图,然后双击build/output/apks/路径下的APK文件

    选择Build->Analyze APK菜单,然后选择要分析的APK

注意:Build APK的时候,如果开启了Instant Run选项,则不能使用APK Analyzer对生成的APK进行分析。(APK中如包含instant-run.zip,则是开启了Instant Run选项生成的APK)

27.1.4.2 查看文件和大小信息

APK文件是ZIP格式的压缩文件,APK Analyzer把APK中的每个文件或文件夹作为一个实体,选中一个APK后,APK Analyzer会按树形结构显示APK里的文件和文件夹,如下所示:

APP开发实战171-使用APK Analyzer分析APP

   Raw File Size:APK解压后的其中的实体大小

    DownloadSize:实体被Google Play压缩后的大小

    %of Total Download Size:每个实体的Download Size所占的总Download Size的百分比。

27.1.4.3 查看AndroidManifest.xml

如果工程中包含了多个AndroidManifest.xml文件或包含的库中有manifest文件,在编译成APK的时候,这些manifest文件会被合并成一个文件。这个manifest文件是在APK中是一个二进制文件,但使用APK Analyzer中,能够以XML文件的形式查看文件内容,可以使开发者了解在编译的过程中,发生了哪些变化。如可以看到库文件中的AndroidManifest.xml文件是怎样被合并到最终的AndroidManifest.xml文件中的,而且如果AndroidManifest.xml文件中有错,在APK Analyzer界面的右上角会显示提示图标。如下所示:

27.1.4.4 查看代码和资源实体

    使用APK Analyzer还可以查看代码和资源文件,点击res文件夹中的每个文件,在窗口的下方会显示文件的具体内容,包括图片,如下所示:

APK Analyzer也能显示文本和二进制文件的内容,如显示resources.arsc

中的字符串资源内容:

27.1.4.5 查看DEX文件

    APKAnalyzer可以查看DEX文件的信息,能看到类、包、总的引用和声明个数,这些信息能够帮助开发人员决定是否使用multi-dex特性、或者移除依赖使得满足64K方法数限制。

如下图所示,每个包、类、方法都列有Defined Method和Referenced Method。Referenced Method列是DEX文件中引用的全部方法,它包含了定义的方法、依赖的library、定义在标准Java和Android包中的方法。Defined Method列只包含了定义在DEX文件中方法,因此它是Referenced Method方法的子集。

注意:当引入一个依赖时,在依赖中定义的方法会包含在Defined Method和Referenced Method中。

27.1.4.6 比较APK文件

    APKAnalyzer也能对两个APK文件进行比较,这有助于开发人员了解当前版本和之前版本相比,APK中的文件大小有什么变化。

在APK Analyzer中导入一个APK,然后在APKAnalyzer窗口的右上角点击CompareWith,选择另一个版本的APK,点击OK。然后就会出现下图所示的对话框,显示两个版本的文件大小差异: