移动性能测试 [求教] Android App 持续集成性能测试:相同 Revision 的代码两次打包,包大小为什么会不一样?

debugtalk · 2016年05月05日 · 最后由 黑水 回复于 2016年05月06日 · 1672 次阅读

最近,在对公司内部 Android App 进行包大小(pkg_size)持续监控时发现一个奇怪的现象。说明问题之前,先描述下背景。

在公司内部,持续集成性能测试系统会根据业务需求,对各个分支的代码采用不同的监控策略,包括定时触发执行性能测试,以及按照代码提交执行性能测试。

其中,UC 浏览器中文版/projects/cn/10.9.10分支采用的是定时触发监控策略,持续集成性能测试系统每天会将该分支最新 Revision 的代码集成打包成 apk 后执行各项 App 性能测试,包括启动时间、内存、包大小等等。

奇怪的地方在于,最近几天/projects/cn/10.9.10分支都没有新的代码提交,即每天定时触发时打包用的都是同一份代码,但是监控得到的包大小却是波动的,波动情况如下图所示。

虽然波动范围不大,只有 2KB 左右,但是这还是令人费解。理论上,完全相同的代码,打包得到的 apk 应该也是完全相同的啊,为什么包大小会存在差异呢?

针对这个疑问,我请教了一些同事,得到的解释中包含两个可能的原因。

  • apk 归档:每次归档时文件顺序不完全一致,会造成最后打包得到的 apk 的大小不同
  • 压缩算法(LZMA)的效率:在打包时压缩算法不完全稳定,会对打包得到的 apk size 造成一定差异

对于这两个解释,我都还没有去验证,不知论坛中的前辈们是否之前有遇到过这个问题,还请多多指点。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 10 条回复 时间 点赞

解压对比文件夹,看看哪些文件不一样大

#1 楼 @sanlengjingvv 外壳和内核文件都有变化,变化文件也有好几十个,以 jar 为主,和少量的.so、.html,以及 classes.dex;不过每个文件都变化很小,基本都是几个字节,最大的也就几十字节

有依赖其他代码库的内容吗?对比的是已用 zipalign 压缩的包吗?

第三方库是否是动态更新的?第三方库的版本是否有变化?

那个研发的回答不太靠谱. 你还是解压挨个对比 apk 里面的每个文件大小吧. apk 和 ipa 都是 zip 文件格式.

#5 楼 @seveniruby 有对比子项的,但根据子项的差异也很难看出问题

#3 楼 @chenhengjie123
#4 楼 @yangchengtest 确认了下,应该不是第三方库更新的问题

#6 楼 @debugtalk 当然是自己写个脚本去判断了. 差几个字节的不用管. 取整下然后 diff 下就知道差异了

#8 楼 @seveniruby 在回复你的贴图里面,就是两个包的详细 diff 结果

对比下单个文件,不是有 html 不一样? jar 也可以解压

—— 来自 TesterHome 官方 安卓客户端

11楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册