APP开发实战171-使用APK Analyzer分析APP
2017-05-14 15:16
429 查看
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里的文件和文件夹,如下所示: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文件中有错,在APKAnalyzer界面的右上角会显示提示图标。如下所示:
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。然后就会出现下图所示的对话框,显示两个版本的文件大小差异:
相关文章推荐
- 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构
- 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
- Android开源实战:使用MVP+Retrofit开发一款文字阅读APP
- APP开发实战170-ABI管理和SO文件的使用简介
- APP开发实战150-Android 提示功能设计(AlertDialog、Toast和Snackbar的使用)
- 实战使用Axure设计App,使用WebStorm开发 – 构建页面架构
- APP开发实战80-Fragment的使用场景
- APP开发实战147-使用AOP技术输出Log
- APP开发实战115-功能宏的使用
- APP开发实战156-Volley网络库的简介和使用
- 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
- 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能
- 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI
- APP开发实战148-使用AOP技术输出Log的具体实现
- jni开发 - 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目
- 实战使用Axure设计App,使用WebStorm开发(6) – 迈向后端
- 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI
- APP开发实战151-Android使用try…catch…处理异常
- APP开发实战149-Android Studio模板的定制使用