热更新系列目录
博客创建时间:2021.02.24
博客更新时间:2021.02.24
很早以前就有写Sophix的博客,但是使用一段时间后有了新的感受和心得,重新整理出该篇博客。
Sophix
Sophix是阿里云提供的全平台App热修复服务方案。产品基于阿里巴巴首创hotpatch技术,提供最细粒度热修复能力,让您无需等待实时修复应用线上问题。
Sophix热修复技术是在Andfix技术基础上吸收了Tinker的优点后,出现的一种目前为止最强大的热修复技术框架。
关于Tinker的介绍可以阅读本人的另一篇博客《热更新Tinker类加载原理》,该篇博客会详细介绍Tinker热修复的原理。
核心原理
Sophix热更新的实质有两种更新方案:底层方法替换
+类加载替换
。它的补丁包是一种.jar格式。
AndFix和Tinker分别是阿里系和腾讯系采用的两种热修复技术方案,其热修复的核心思想是**底层方法替换
** 与 类加载替换
。 两种方案各有利弊,Sophix基本兼容了两者的优点,功能更加强大,稳定而便捷。
底层方法替换:为了解决Andfix存在的底层替换兼容性问题,Sophix做了一些额外的努力。Sophix通过动态测试ArtMethod的Size(通过c层的mempy(dest、src、size)方法),进行全量拷贝。只要对当前虚拟机中的ArtMethod进行统一拷贝,完成替换就能消除不同虚拟机的导致的Artmethod结构差异。.
优点
- Sophix具有底层替换的修改及时性和类加载方案的兼容性,Sophix吸收了百川Hotfix和Tinker的优点于一生,会自动判断在打补丁时选用哪种方案。
- Sophix采用非侵入式接入与打包,接入成本低,图形化补丁生成,”傻瓜式接入”。
- 阿里提过了补丁管理平台,无需开发者自己在服务器中开发管理功能。
- 部分更新无需重启软件,下载的patch极小,相比其他方案,通过两种更新方案,修复成功率极高。
Andfix
AndFix不同于QQ空间超级补丁技术和微信Tinker通过增加或替换整个DEX的方案,提供了一种运行时在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的
Andfix采用的方法替换的热更新方案,其热更新流程。
Andfix优点:
- BUG修复的即时性,对应用无侵入,几乎无性能损耗
- 补丁包同样采用差量技术,生成的PATCH体积小
不足:
-
不支持新增字段,以及修改方法,也不支持对资源的替换。
-
由于厂商的自定义ROM,对少数机型暂不支持。
Andfix的ArtMethod方法结构是根据Android开源代码写死的,面对国内厂商的定制,经常会导致两者ArtMethod方法结构不一致,这也是兼容问题产生的根本原因。
相关链接:
扩展链接:
- ART与Dalvik、JVM之间的关系你懂了吗?
- System.exit(0) 与 android.os.Process.killProcess(android.os.Process.myPid())
博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !