考虑问题
类替换
so替换
资源替换
即时生效
性能损耗
补丁包大小
全平台支持
AndFix
nativeHook ,在native进行方法结构体信息替换
优点:
即时生效,性能开销小
缺点:
兼容性问题,只能替换方法
Robust
javaHook
为每个方法自动插入修复逻辑,ChangeQuickRedirect不为空执行对应逻辑
优点:
兼容性高,立即生效,支持混淆,内联优化等操作
缺点:
不支持so和资源替换,侵入性强,会增加包体积
multidex
QQ空间热修复
DexPathList-> makePathElements (Element[] dexElements;)
findclass 顺序遍历Element数据获取DexFile,然后调用DexFile findClass。
插件化原理将补丁dex插入到数组最前面
优点:
代码是非侵入性的,对包体积影响不大
缺点:
重启生效,性能消耗大
dex替换
Tinker
提供差分包,合并后替换
优点:
兼容性高,补丁小,非侵入性
缺点:
冷启动生效,Dex合并内存消耗在VM head,容易OOM
资源修复
反射 AssertManager addAssertPath
so修复
接口替换
先加载指定补丁so,如不存在,再去加载apk so。
反射注入
将so 插入到nativeLibraryDirectories最前面。
网友评论