1、热修复
AndFix -> HotFix -> SoFix
AndFix
在native动态替换java层的方法,通过native层hook java层的代码。
补丁包:dex
补丁包(Test)-类加载->Test.class-反射->Method-反射-?MethodReplace
获取到补丁包中的Test类
ClassLoader#loadClass(指定加载的类)
DexFile
AndFix 为什么会被淘汰掉?
兼容问题,每个都要去兼容,类的属性会有变化。
SopFix(收费的)
实际上是AndFix升级版本,
Robust:Instant Run 热部署
自定义gradle插件 字节码插装
路由 martrix(卡顿监控) 无侵入埋点 都用到插装技术
Tinker
需要重新启动才能生效
bsdiff 1.txt 2.txt patch
差分
bspatch 1.txt new2.txt patch
合成
抖音:libbspatch.so
微信:libbspatch_utils.so
增量更新
bsdiff:so 资源等其他文件的差分
dexdiff:dex文件
1、下载补丁包
2、得到安装在手机中的有bug的apk中的dex PMS
3、合成 bsdiff 、bspatch(手机里面要做的)
4、使用合成的dex
类加载
反射 类加载 注解
ActivityThread#main Looper -> new H(Handler)
双亲委托机制
1、避免重复加载。
2、安全性考虑,防止核心API库被随意篡改。
注解处理方式三种
andFix RUNTIME 反射
robust CLASS 字节码插桩
Tinker SOURCE 注解处理器