Android 热更新AndFix的分析

1.AndFix

只能修复方法级别的bug

 使用流程:添加依赖→封装工具类→生成差异包(.patch文件)→loadpatch方法更新

源码:

初始化源码:PatchManager→init(比较版本号,删除旧版本)

加载源码:addpatch→initPatchs()→addpatch()→loadpatch()→fix()→fixclass()→replaceMethod()→addReplaceMethod()→

replaceMethod→native void replaceMethod

 

工具类?

PatchManager(初始化)

Android 热更新AndFix的分析_第1张图片

比较版本号,删除旧版本

Android 热更新AndFix的分析_第2张图片

addPatch,指定目录的文件add进去

Android 热更新AndFix的分析_第3张图片

Android 热更新AndFix的分析_第4张图片

LoadPatch 动态加载文件

加载目录下的所有文件

Android 热更新AndFix的分析_第5张图片

 

加载目录下的指定文件

Android 热更新AndFix的分析_第6张图片

如图是通过fix方法去加载patch文件的

fix方法中是通过DexFile完成加载的。

Android 热更新AndFix的分析_第7张图片

dexFile文件中又是通过fixClass方法处理dexFile文件

Android 热更新AndFix的分析_第8张图片

fixclass方法中去解析文件并拿到有变动的方法通过replaceMethod方法去处理文件中的方法

Android 热更新AndFix的分析_第9张图片

replaceMethod方法中又通过AndFix。addReplaceMethod方法处理修复的方法

Android 热更新AndFix的分析_第10张图片

addReplaceMethod方法中又是一个replaceMethod方法

这个replaceMethod是一个native方法

你可能感兴趣的:(面试问题系列)