热修复选型和原理

微信的Tinker基于QQ空间的Numa

Android ClassLoader

PathClassLoader 应用启动后加载 data/app/...

DexClassLoader 应用启动前加载 热修复使用


Numa原理,基于Android分包的基础上的,应用启动时加载主dex文件,启动后在加载其他的dex文件,多个dex文件排成有序数组,虚拟机加载类的时候会逐个加载dex文件,把热修复的代码插入到dex数组的最前面使用新类替换旧类

问题:当热修复的dex过大的时候会是应用启动变慢,针对这个不足,微信提出了Tinker


Base.apk和Fix.apk进行差异化对比合并产生fix_classes.dex然后在将替换掉要修复的dex文件,dex数目不会新增,启动不会延时


阿里百川HotFix(Sophix)

阿里热修复经历了Dexposed->AndFix->HotFix 1.x->HotFix 2.x(SoFix)

Dexposed 

AOP框架 Xposed开源框架 Hooking思想

系统支持:Dalvik 2.3\4.0-4.4

CPU:arm

只支持方法级别上的修复,不支持函数的增加,资源的修复


AndFix

方法级别的修复


HotFix 未开源

native层修复







猜你喜欢

转载自blog.csdn.net/lovelyprogrammer/article/details/80687778