Android热修复方案浅析

热修复就是动态下发代码,它可以使开发者在不发布新版本的情况下,修复 BUG 和发布功能, 避免长时间的审核等待以及多次被拒造成的成本,达到及时解决问题和发布功能的目的

一. 实现方案

目前热修复的实现套路基本上离不开以下两种:

实现方案描述代表
底层替换方案底层替换方案限制颇多,但时效性最好,加载轻快,立即见效阿里系的AndFix、Sophix
类加载方案类加载方案时效性差,需要重新冷启动才能见效,但修复范围广,限制少QZone超级补丁、微信Tinker

二. 方案对比分析

以下是Tinker、QZone超级补丁、AndFix、Robust对比图。

支撑\方案TinkerQZone超级补丁AndFixRobust
类替换yesyesnono
So替换yesnonono
资源替换yesyesnono
全平台支持yesyesyesyes
即时生效nonoyesyes
性能损耗较小较大较小较小
补丁包大小较小较大一般一般
开发透明yesyesnono
复杂度较低较低复杂复杂
gradle支持yesnonono
Rom体积较大较小较小较小
成功率较高较高—般最高

AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的;

Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案;

QZone超级补丁方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。

特别是在Android N之后,由于混合编译的inline策略修改,对于市面上的各种方案都不太容易解决。而Tinker热补丁方案不仅支持类、So以及资源的替换,它还是2.X-8.X(1.9.0以上支持8.X)的全平台支持。利用Tinker我们不仅可以用做bugfix,甚至可以替代功能的发布。

更重要的是,tinker方案目前是bugly热修复方案,这样子作为一个初创企业,只需要集成bugly sdk即可拥有强有力的热修复能力以及版本发布能力,同时兼具客户端bug收集等基本功能,极大的减少了企业的人力成本。


参考文档:

  1. bugly文档中心:

    https://bugly.qq.com/docs/

  2. buglyDemo地址:

    https://github.com/BuglyDevTeam/Bugly-Android-Demo

  3. tinker地址:

    https://github.com/Tencent/tinker

  4. AndFix地址:

    https://github.com/alibaba/AndFix

  5. Robust地址:

    https://github.com/Meituan-Dianping/Robust

  6. QZone超级补丁:

    https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值