Android 热修复原理,阿里Android研发岗二面
作者:互联网
简单来说,在编译时通过新旧两个Dex生成差异path.dex。在运行时,将差异patch.dex重新跟原始安装包的旧Dex还原为新的Dex。这个过程可能比较耗费时间与内存,所以我们是单独放在一个后台进程:patch中。为了补丁包尽量的小,微信自研了DexDiff算法,它深度利用Dex的格式来减少差异的大小。
四、阿里Sophix
原理(双剑合璧):
1.优化Andfix(突破底层结构差异,解决稳定性问题):
Andfix底层ArtMethod结构时采用内部变量一一替换,倒是这个各个厂商是会修改的,所以兼容性不好。
Sophix改变了一下思路,采用整体替换方法结构,忽略底层实现,从而解决兼容稳定性问题。
2.突破QQ和Tinker的缺陷
QQ和Tinker的缺陷
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,如下图所示。
3.资源修复另辟蹊径
常用方案(Instant Run技术):这种方案的兼容问题在于替换AssetManager的地方
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架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》
标签:dex,Dex,二面,Sophix,补丁包,阿里,架构,Android 来源: https://blog.csdn.net/m0_65146275/article/details/122285368