1. 前言
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到底采用哪种方案,是开发者比较头疼的问题。本文希望通过介绍QQ空间补丁、Tinker以及基于AndFix的阿里百川HotFix技术的原理分析和横向比较,帮助开发者更深入了解热修复方案。
2. 技术背景
2.1 正常开发流程
在正常软件开发流程中,线下开发->上线->发现bug->紧急修复上线。不过对于这种方式代价太大。
2.2 热修复开发流程
而热修复的开发流程显得更加灵活,无需重新发版,实时高效热修复,无需下载新的应用,代价小,最重要的是及时的修复了bug。
2.3 修复什么
2.4 修复优势
3. 热修复框架
3.1 百花齐放百家争鸣
名称 | 归属 | 代码 | 修复方式 | 支持Android版本 |
Dexposed | 阿里 | 开源 | 实时修复 | 不支持ART |
Andfix | 阿里 | 开源 | 实时修复 | 2.3~7.x |
阿里百川HotFix | 阿里 | 未开源 | 实时修复 | 2.3~6.x |
Sophix | 阿里 | 未开源(商业收费) | 实时修复+冷启动修复 | 全部 |
QZone超级补丁 | QQ空间 | 未开源 | 冷启动修复 | 2.3~7.x |
Qfix | 手Q团队 | 开源 | 冷启动修复 | 2.3~7.x |
Robust | 美团 | 开源 | 实时修复 | 全部 |
Nuwa | 大众点评 | 参考QZone实现开源 | 冷启动修复 | 2.3~7.x |
RocooFix | 百度金融 | 开源 | 冷启动修复 | 2.3~7.x |
Aceso | 美丽说蘑菇街 | 开源 | 实时修复 | 4.x-7.x |
Amigo | 饿了么 | 开源 | 冷启动修复 | 4.x-7.x |
Tinker | 微信 | 开源 | 冷启动修复 | 全部(不支持个别三方ROM) |
还有一些内部使用的没有公开就不再说了,从上面的表格可以看出目前还在继续维护的有Tinker(微信团队)、Robust(美团)、Sophix(阿里)都是技术力量雄厚的公司在维护,这里要感谢这些公司和幕后的程序员。
故,如果你的项目要进行热更新建议选择Tinker(微信团队)、Robust(美团)、Sophix(阿里)其中之一,根据自己团队及项目的情况进行选择。
3.2 简单分类
3.3 根据技术分类
4.技术原理及特点
4.1 Sophix(阿里)
请翻阅我的博客:Android的热更新方案之Sophix非侵入式热修复方案
4.2 Tinker(微信团队)
请等待……我会写一遍来介绍的。
4.3 Robust(美团)
请等待……我会写一遍来介绍的。
5. 技术实现方案基础知识
1. Android中Instant Run工作原理及用法:http://www.aoaoyi.com/archives/1260.html
2. Android动态编译技术:Plugin Transform Javassist:http://www.aoaoyi.com/archives/1272.html
3. 实现Gradle自定义插件:http://www.aoaoyi.com/archives/1274.html
6. 未来展望
6.1 热修复的必要性
热修复是一个与业务完全无关的模块,开发者如果要自己实现一套可靠的热修复框架,将花费大量时间和精力。虽然市面上已经有很多开源的热修复实现,然而其中的很多坑,往往要踩过才知道,等你把这些坑一一踩过之后,可能大量的用户已经对你失去信心。所以,依靠一个稳定可靠、而且简单实用的商业版本,反而能使各方面的成本降到最低。并且,热修复并不是简单的客户端SDK,它还包含了安全机制和服务端的控制逻辑,这整条链路也不是短时间内可以快速完成的。
6.2 对Android的生态的影响
很多人会把热修复技术跟其他国内厂商的“黑科技”混为一谈。有人说,你们国内开发者就是瞎搞,就不能给我们Android用户一个更加纯净的环境吗?
这里我需要澄清一下。热修复技术不同于其他国内的Android“黑科技”。就比如,国内Android进程保活,是让app持续驻留在后台避免被系统杀死,这既耗费手机电量又占内存,浪费了很多手机资源。再比如,app自行定制的推送服务,无节操地对用户进行信息轰炸。还有更过分的全家桶,一个app同时拉起一票app,并且长期占着内存,使得手机卡顿不堪。总归,这些技术都是为了app厂商的利益而损害手机使用者的实际体验。
而热修复技术是完全不同的,它达到的是一个手机用户和开发者双赢的目的。不仅厂商可以快速迭代更新app,使得功能能最快上线。并且由于热更新过程是毫无感知的,手机用户也减少了繁琐的更新步骤,节省了大量等待更新的时间。这实际上是改善了Android的生态环境。只是这其中最重要的,是要保证热修复功能的稳定性。
6.3 Android与iOS热修复的不同
前段时间,苹果封杀了iOS的热修复功能,很多人就因此不看好热修复技术了。这里我想说的是,苹果的政策并不能证明他有多先进,相反,作为独裁者,苹果做过很多不得人心的事,就比如前段时间封杀微信的文章打赏功能。热修复功能被禁止,会使得很多app不得不靠直接发版进行更新,这样一旦新版本出了问题,整个更新迭代过程变得十分漫长。并且一些试验性功能无法进行灰度,这就使得一个重要功能的更新将直接全量发版,如果功能不够稳定,波及范围就变得非常广。而且,用户需要重新下载整个app,不仅流程漫长,原本不到1MB的补丁就能解决的事,现在不得不下载几十MB的完整包才能更新。
再看回Android的情况,Android热修复和iOS是有极大不同的。主要有两个方面:
- 谷歌和苹果在中国的地位不同
- Android和IOS的开放性不同
谷歌在中国没有像苹果那样的控制力,即使它想要封杀也不可能,国内是有各个安卓应用市场的,没有统一的app安装渠道。另外,Android是开源的,各个厂商都可以做定制,想统一各家的安装渠道几乎是不可能的。
6.4 未来,无限可能!
对于未来是很乐观的,Android的热修复领域不仅不会受到封杀,反而还有很大的发展空间。热修复结合安全加固,将会使得app的稳定性和安全性更加坚不可摧。甚至后续还可以与系统厂商合作,对系统app乃至系统组件进行修复,这样就可以避免频繁OTA升级。
因此,热修复所能发挥是价值将是十分巨大的。热修复还可以与其他领域进行碰撞,引发无限的可能性。