热修复基础
热修复基础
热修复介绍
什么是热修复
动态更新修复 apk 的行为。
不用发布新版本,用户可以更新新的功能及 bug 修复
市面上的热修复技术
QQ 空间的超级补丁方案(Nuwa)
超级补丁基于 DEX 分包方案,使用了多 DEX 加载的原理,大致原理:把 Bug 方法修复以后,放到一个单独的 DEX 里,插入到 dexElements 数组的最前面,让虚拟机去加载修复完后的方法
微信的 Tinker
Tinker 针对超级补丁提出了提供 Dex 差量包,整体替换 Dex 的方案。主要的原理与 QQ 空间超级补丁技术基本相同,区别在于不再将 patch.dex 增加到 dexElements 数组的最前面,而是差量的方式给出 patch.dex,然后将 patch.dex 与应用的 classes.dex 合并,然后整体替换掉旧的 dex 文件。
阿里的 AndFix/HotFix
提供了一种运行时在 native 修复 field 指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗
美团的 Robust、ele 的 migo、百度的 hotfix、阿里的 dexposed
技术对比:
热修复方案
- Dexposed 手机淘宝技术团队,针对 Dalvik 虚拟机运行时的 Java Method Hook 技术。基于 Xposed。无法兼容 ART 虚拟机,作罢
- Andfix 支付宝出品,运行时即时生效,兼容 DVM 和 ART; 只能修改代码层面,资源和 so 热修复未实战
- Hotfix 阿里百川,基于 Andfix
- Tinker
- Amigo
- Sophix 代码修复,资源修复,so 库修复
如何技术选型
- 我们的需求时什么,需求是衡量一切的标准
- 能满足需求的条件下,哪个学习成本最低
- 学习成本一样的情况下,优先选择大公司的方案
本文由作者按照 CC BY 4.0 进行授权