Android 热修复原理,阿里Android研发岗二面

简单来说,在编译时通过新旧两个Dex生成差异path.dex。在运行时,将差异patch.dex重新跟原始安装包的旧Dex还原为新的Dex。这个过程可能比较耗费时间与内存,所以我们是单独放在一个后台进程:patch中。为了补丁包尽量的小,微信自研了DexDiff算法,它深度利用Dex的格式来减少差异的大小。

四、阿里Sophix

原理(双剑合璧):

Android 热修复原理,阿里Android研发岗二面

1.优化Andfix(突破底层结构差异,解决稳定性问题):

Andfix底层ArtMethod结构时采用内部变量一一替换,倒是这个各个厂商是会修改的,所以兼容性不好。

Android 热修复原理,阿里Android研发岗二面

Sophix改变了一下思路,采用整体替换方法结构,忽略底层实现,从而解决兼容稳定性问题。

Android 热修复原理,阿里Android研发岗二面

2.突破QQ和Tinker的缺陷

QQ和Tinker的缺陷

Android 热修复原理,阿里Android研发岗二面

Sophix对dex的解决方案

  • Dalvik下采用阿里自研的全量dex方案:不是考虑把补丁包的dex插到所有dex前面(dex插桩),而是想办法在原理的dex中删除(只是删除了类的定义)补丁dex中存在的类,这样让系统查找类的时候在原来的dex中找不到,那么只有补丁中的dex加载到系统中,系统自然就会从补丁包中找到对应的类。

  • Art下本质上虚拟机以及支持多dex的加载,Sophix的做法仅仅是把补丁dex作为主dex(classes.dex)而已,相当于重新组织了所有的dex文件:把补丁包的dex改名为classes.dex,以前apk的所有dex依次改为classes2.dex、classes3.dex … classesx.dex,如下图所示。

Android 热修复原理,阿里Android研发岗二面

3.资源修复另辟蹊径

常用方案(Instant Run技术):这种方案的兼容问题在于替换AssetManager的地方

Android 热修复原理,阿里Android研发岗二面

Sophix资源修复方案

![](https:

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

//upload-images.jianshu.io/upload_images/15234279-b2d26d96806556ab?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “image”)

4.SO修复另辟蹊径

Android 热修复原理,阿里Android研发岗二面

更多Android开发资料+面试架构资料 免费分享 点击链接 即可领取

《Android架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》

《Android架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》

上一篇:oracle清理临时表空间


下一篇:6年Android 开发在阿里的一日游(记录篇)