微信的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层修复