很早之前就想深入的研究和学习一下热修复,由于时间的原因一直拖着,现在才执笔弄起来。


Android而更新系列:
Android热更新一:JAVA的类加载机制
Android热更新二:理解Java反射
Android热更新三:Android类加载机制
Android热更新四:热修复机制
Android热更新五:四大热修复方案分析
Android热更新六:Qzone热更新原理
Android热更新七:Tinker热更新原理
Android热更新八:AndFix热更新原理
Android热更新九:Robust热更新原理
Android热更新十:自己写一个Android热修复


阿里百川推出的热修复HotFix服务,相对于QQ空间超级补丁技术和微信Tinker来说,定位于紧急BUG修复的场景下,能够最及时的修复BUG,下拉补丁立即生效无需等待。


1、AndFix实现原理

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

原理图如下:


2、AndFix实现过程

对于实现方法的替换,需要在Native层操作,经过三个步骤:


image

接下来以Dalvik设备为例,来分析具体的实现过程:

1、setup()


对于Dalvik来说,遵循JIT即时编译机制,需要在运行时装载libdvm.so动态库,获取以下内部函数:

1) dvmThreadSelf( ):查询当前的线程;

2)dvmDecodeIndirectRef( ):根据当前线程获得ClassObject对象。

2、setFieldFlag


该操作的目的:把 private、protected的方法和字段都改为public,这样才可被动态库看见并识别,因为动态库会忽略非public属性的字段和方法。

3、replaceMethod


该步骤是方法替换的核心,替换的流程如下:


AndFix对ART设备同样支持,具体的过程与Dalvik相似,这里不再赘述。

从技术原理,不难看出阿里百川HotFix的几个特点:

优势:
BUG修复的即时性
补丁包同样采用差量技术,生成的PATCH体积小
对应用无侵入,几乎无性能损耗

不足:
不支持新增字段,以及修改方法,也不支持对资源的替换。
由于厂商的自定义ROM,对少数机型暂不支持。

更多相关文章

  1. Android热更新二:理解Java反射
  2. Android热更新五:四大热修复方案对比分析
  3. android 更新列表
  4. Android热更新十:自己写一个Android热修复
  5. Android热更新三:Android类加载机制
  6. 第5章 Android常见XML属性解析-更新中
  7. 一些小效果(持续更新……)
  8. Android(安卓)SDK Android(安卓)NDK 官方下载地址(更新加版本号
  9. 【学习推荐】最新Android学习教程持续更新

随机推荐

  1. ( 转)关于Android的nodpi,xhdpi,hdpi,mdp
  2. Android(安卓)Studio 最全使用技巧和快捷
  3. Android开发工具Android(安卓)Studio、An
  4. Android之TableLayout布局
  5. Android的线程使用来更新UI----Thread、H
  6. Android之Wifi学习教程
  7. Android开源DiscreteSeekbar:动画气泡指示
  8. Android(安卓)API 中文 (42) ―― ListVi
  9. 关于Android使用proguard进行代码混淆
  10. Android(安卓)XML解析(Simple API for XM