1.AndFix
只能修复方法级别的bug
使用流程:添加依赖→封装工具类→生成差异包(.patch文件)→loadpatch方法更新
源码:
初始化源码:PatchManager→init(比较版本号,删除旧版本)
加载源码:addpatch→initPatchs()→addpatch()→loadpatch()→fix()→fixclass()→replaceMethod()→addReplaceMethod()→
replaceMethod→native void replaceMethod
工具类?
PatchManager(初始化)
比较版本号,删除旧版本
addPatch,指定目录的文件add进去
LoadPatch 动态加载文件
加载目录下的所有文件
加载目录下的指定文件
如图是通过fix方法去加载patch文件的
fix方法中是通过DexFile完成加载的。
dexFile文件中又是通过fixClass方法处理dexFile文件
fixclass方法中去解析文件并拿到有变动的方法通过replaceMethod方法去处理文件中的方法
replaceMethod方法中又通过AndFix。addReplaceMethod方法处理修复的方法
addReplaceMethod方法中又是一个replaceMethod方法
这个replaceMethod是一个native方法