前言

每个版本专项测试都需要记录 apk 的总大小值,然后对比每个版本的包大小总值,这个总大小对于开发并没有什么实际价值,因为不够细化 apk 中各种资源的大小.

比如 dex、so、图片资源各自占比、是否有重复资源、是否有图片未压缩等.

如果能每个版本检查出上述问题并提出优化建议,那么在持续集成中价值就比较大.

编译打包过程

打包过程.png

资源组成

dex

Android 开发编写的是.java 代码,Android 在运行时用的是 dalvik 虚拟机,而 dalvik 虚拟机只能运行.dex 文件.

dex 文件的加载是通过 DexClassLoader、PathClassLoader 等类来完成的.

通过 Android Studio 分析下 dex 文件,共有 6 个 dex 文件.

image

出现多个 dex 文件,是因为做了 dex 分包.每个 dex 要求方法数不能超过 65536 上限.

.so

.so 文件是 NDK 编译出来的,项目中使用 RenderScript 支持库,OpenCV,Unity,android-gif-drawable,SQLCipher 等,已经在生成的 APK 文件中包含.so 文件了.

这里提到了 NDK 工具,NDK 提供了一系列的工具,帮助开发者快速开发 C(或 C++)的动态库,并能自动将 so 和 java 应用一起打包成 apk.

.png

.png 是常见的资源文件,在 Android 项目中路径是 res 文件路径下.

.js

现在多数 app 的是混合模式开发,通常会内置一些常用 js 文件,使用的时候从本地使用 js 文件,减少网络请求 js 文件并且提高 web 页面的响应时间.

.xml

.xml 文件是配置 icon 展示的颜色和大小等参数.

.mp4

有些 app 在首页安装会播放一段介绍视频,会内置一份.mp4 文件到 app 中.

分析过程

使用微信最近开源的项目 Matrix-ApkChecker 工具,以下是 ApkChecker 工具的原理和分析过程

原理

image

执行过程

image

使用

请参考:https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker#matrix-apkchecker-的使用

在 git 上下载 matrix-apk-canary-0.4.10.jar.

简单使用命令如下:

java -jar matrix-apk-canary-0.4.10.jar --apk apk路径

使用配置文件命令如下:

java -jar matrix-apk-canary-0.4.10.jar -apk apk路径 --config 配置文件路径

配置文件太长就不帖子了,基本上和官方教程是一样的.

执行完命令之后,会生成 html 和 json 两个文件.

image

自动化执行

自动化脚本

把上述执行 jar 包的操作封装成 python 脚本.

优化报告

优化下报告,因为原生的报告数据很多并且描述都是英文的.
开发同学看到这些并不能直观的看出问题.所以做了优化报告.

image

上传结果

报告生成到本地后,把报告上传给后端保存,在测试平台展示并且生成对比图.

image

执行策略

包检查是一种低频率测试,每天执行一次即可.

优化建议

重复代码

当然重复代码是可以从代码扫描的角度发现,减少重复代码也可以达到包瘦身的效果.

未使用的资源文件

资源文件没有被真正引用到

重复的资源文件

资源目录下有两个一样的文件,根据对比文件 md5

图片格式

webp 格式比 png、jpg 体积小

项目地址

已经把 Matrix-ApkChecker 加入到 monkey 测试脚本中

项目地址:https://github.com/xinxi1990/maxauto

cd checker
python run.py apk_path mail_list(多个人逗号分隔)

参考

原理介绍

https://mp.weixin.qq.com/s/tP3dtK330oHW8QBUwGUDtA

github 地址

https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker

Android 中的 dex、apk、ClassLoader 详解

https://blog.csdn.net/u014606081/article/details/71555405

Android NDK 开发 (一) 入门

https://www.jianshu.com/p/0261e6cceb3e


↙↙↙阅读原文可查看相关链接,并与作者交流