首页 > 代码库 > 线上热修复技术

线上热修复技术

没学会、没接触的时候感觉很难,学会了也就没那么难

1.前言

技术分享

技术分享

 

2.相关技术

  • 阿里巴巴  AndFix、Dexposed
  • QQ空间  超级补丁

 

  •  微信  Tinker

(一)AndFix与hotFix技术

AndFix不同于QQ空间超级补丁技术和微信Tinker通过增加或替换整个DEX的方案,提供了一种运行时在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。

技术分享

 

(二) 超级补丁

超级补丁技术基于DEX分包方案,使用了多DEX加载的原理,大致的过程就是:把BUG方法修复以后,放到一个单独的DEX里,插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法。

修复的步骤为:

1. 通过获取到当前应用的Classloader,即为BaseDexClassloader

2. 通过反射获取到他的DexPathList属性对象pathList

3. 通过反射调用pathList的dexElements方法把patch.dex转化为Element[]

4. 两个Element[]进行合并,把patch.dex放到最前面去

5. 加载Element[],达到修复目的

(三) Tinker

 微信针对QQ空间超级补丁技术的不足提出了一个提供DEX差量包,整体替换DEX的方案。主要的原理是与QQ空间超级补丁技术基本相同,区别在于不再将patch.dex增加到elements数组中,而是差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并,然后整体替换掉旧的DEX文件,以达到修复的目的

技术分享

参考博客http://www.cnblogs.com/alibaichuan/p/5863616.html

线上热修复技术