一、什么是热修复?
热修复:让应用能够在无需重新安装的情况实现更新,帮助应用快速建立动态修复能力。其实就是打补丁包,像我们玩王者荣耀老是需要更新个几十M的文件,其实很多就是补丁包。也就是应用上线后出现bug,不用再发布新的版本,而是使用补丁包修复,在用户无感知的情况下修复bug.
二、修复哪些东西?
三、热修复开发流程
上线版本--用户安装--发现bug--紧急修复--打出补丁,推送给用户--自动拉取补丁修复
而热修复的开发流程显得更加灵活,优势很多:
无需重新发版,实时高效热修复
用户无感知修复,无需下载新的应用,代价小
修复成功率高,把损失降到最低
四、各种热修复框架比较
1.阿里Andfix
1)基本原理
Andfix 采用的方法是,在已经加载了的类中直接在 native 层替换掉原有方法,是在原来类的基础上进行修改的。其核心在于 replaceMethod 函数,所以只支持方法替换,对于方法的增删,资源更新,so 文件更新及类和属性的替换等都是不支持的。偏 native 层。
2)实现思路
在补丁包里面有个修复指定bug的类和方法,通过反射得到这个方法就是等下要替换的新的方法。然后根据注解得到全类名在找到原来bug中的指定类的指定方法,用新的method替换旧的method。在native层通过新类的属性去替换旧类的属性。
3)优点
立即生效,消耗低;
补丁包较小。
4)缺点
仅支持方法替换;
兼容性不佳,对部分机型暂不支持。
2.美团Robust
1)基本原理
Robust 插件对每个产品代码的每个函数都在编译打包阶段自动的插入了一段代码。通过判断 if(changeQuickRedirect != null) 来确定是否进行热修复,当 changeQuickRedirect 不为 null 时,调用 patch.dex 中同名类的同名方法达到 hotfix 的目的。
2)实现思路
-实现ChangeQuickRedirect
-调用
3)优点
兼容性高,开发透明;
实时生效。
4)缺点
会增大方法数,影响运行效率;
暂不支持 so 文件和资源的替换。
3.腾讯Tinker
1)工具使用
bsdiff可以得到两个不同文件中的不同信息,旧文件+新文件=差分文件
bspatch:旧文件+差分文件=新文件
2)基本原理
3)优点
补丁包较小,消耗较小;
开发透明,文档丰富。
4)缺点
占用 ROM 较大;
需要重启才能生效。
4.QZone
其实就是Thinker的旧版,Thinker是对QZone的优化
下文将实战热修复腾讯Thinker