热修复

什么是热修复
在应用上线后出现bug需要及时修复时,不用再发新的安装包,只需要发布补丁包,在客户无感知下修复掉bug
怎么进行热修复
服务端:补丁包管理
用户端:执行热修复
开发端:生成补丁包
开发端:
■补丁包是什么?
■如何生成补丁包?
■开启混淆后呢?
■对比改动自动生成补丁包(gradle)?
用户端:
■什么时候执行热修复?
■怎么执行热修复(使用补丁包)?
■Android版本兼容问题?
AndFix
类加载 + 反射 + ndk
在native动态替换java层的方法,通过native层hookjava层的代码。
在native层完成方法替换
1 |
|
Robust
类加载 + 反射 + 字节码插桩
对每个函数都在编译打包阶段自动的插入了一段代码。类似于代理,将方法执行的代码重定向到其他方法中。
增加apk的体积
1 | public class MainActivity extends AppCompatActivity{ |
Tinker
Tinker通过计算对比指定的Base Apk中的dex与修改后的Apk中的dex的区别,补丁包中的内容即为两者差分的描述
运行时将Base Apk中的dex与补丁包进行合成,重启后加载全新的合成后的dex文件。
tinker 补丁包:patch.dex(差分包,记录了有bug的dex与修复了这个bug的dex的差分信息)
patch.dex + 手机中安装的有bug的dex合成 = 修复了bug的dex文件
1 | public class MyApplicationextends Application { |
1 | public class utils{ |