Android流行的热更新方案

  • 内容
  • 评论
  • 相关

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.技术原理及特点

目前热修复框架还继续维护的有Tinker(微信团队)Robust(美团)Sophix(阿里),那就讲这三个,其他的也会为大家提供其他博客的介绍地址。

4.1 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是有极大不同的。主要有两个方面:
  1. 谷歌和苹果在中国的地位不同
  2. Android和IOS的开放性不同
谷歌在中国没有像苹果那样的控制力,即使它想要封杀也不可能,国内是有各个安卓应用市场的,没有统一的app安装渠道。另外,Android是开源的,各个厂商都可以做定制,想统一各家的安装渠道几乎是不可能的。

6.4 未来,无限可能!

对于未来是很乐观的,Android的热修复领域不仅不会受到封杀,反而还有很大的发展空间。热修复结合安全加固,将会使得app的稳定性和安全性更加坚不可摧。甚至后续还可以与系统厂商合作,对系统app乃至系统组件进行修复,这样就可以避免频繁OTA升级。
因此,热修复所能发挥是价值将是十分巨大的。热修复还可以与其他领域进行碰撞,引发无限的可能性。