编译常见问题
在开发过程中,有碰到过一些由于编译优化导致的代码修改并不符合我们预期的情况。这也就是之前为什么我经常说编译产物其实是不太可以被信任的。
- 方法签名变更,底层仓库的方法变更但是上层模块并没有跟随一起重新编译导致的这个问题。
- 常量优化,将一些常量的调用点直接替换成常量的值。
- 删除空导包, 没有用的一些导包就会做一次剔除。
最近倒霉了
我们最近碰到一个 pipeline
相关而且很妖怪的问题。我们一个 pipeline
会检查apk产物中是否存在异常的方法调用,就是之前介绍的在R8的基础上开发出来的A8。但是最近有一个类被删除了之后呢,但是代码中还有一处调用点。但是这个检测竟然被通过了,然后这部分代码就被合入了master。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYcv0TaO-1660544118612)(https://upload-images.jianshu.io/upload_images/28376244-91362414e15ed530.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
这个引用的文件就如上图所示,是一个 debug buildType
中的,所以并不是所有的apk中都会存在这部分代码。
然后呢,这个 MergeRequest
就被合入了 master
分支,因为当天是我们出下一个版本包的时间,然后交付给测试的就是全量编译的 debug
和 release
包。别的开发同学rebase完master之后就发现 piepline