线上热修复技术

Posted 逆流而上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线上热修复技术相关的知识,希望对你有一定的参考价值。

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

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

以上是关于线上热修复技术的主要内容,如果未能解决你的问题,请参考以下文章

android--------阿里 Sophix移动热修复

什么是热修复?

安卓 热修复的原理

云栖直播:阿里热修复产品HotFix2.0升级详解

Android热修复(HotFix)实战

Android热更新详解