简介:Android 热修复之DexPatch 介绍

1. 方案介绍
为了解决Native模块上线后的问题,mPaas[1] 提供了热修复功能,实现不发布客户端apk场景下的热修复。目前Android端热修复主要包括andfix和dexpatch,考虑到andfix的版本兼容性,目前主要推荐使用DexPatch。
DexPatch修复原理比较简单,就是在启动后通过RPC拉取当前需要下发的jar包地址,然后通过独立进程去下载jar包文件,下载完成后保存。在二次启动的时候hook系统的classLoader,修改DexPathList, 在其数组的最前面加入一个有修改过的class的dex文件,使其拦截住数组后面的dex文件中同名的class的加载。如下图所示,classloader就会优先加载Patch.dex中的Ding.class,而忽略Classes.dex中的Ding.class, 达到了替换的效果。

基于这样的原理,DexPatch具有以下特征:
1.支持范围:是基于类级别的替换,所以只支持Java模块的patch,不支持非Java模块的patch,比如so模块。
2.兼容性:由于代理了系统的ClassLoader,使用的黑科技较少,所以整体方案兼容性较好。
3.生效时效性:只能在下载patch重启后才能生效,不支持实时生效。
4.成功率:由于使用独立进程下载,减少了启动阶段主进程闪退对patch下载的影响,提升了下载的成功比例。

本文详细介绍了Android热修复技术DexPatch的工作原理、使用步骤,包括启动阶段的patch拉取、代码操作、白名单配置、patch生成与发布、下载验证等,并给出了常见问题的解决方案,强调了DexPatch的兼容性和下载成功率优势。
最低0.47元/天 解锁文章
4020

被折叠的 条评论
为什么被折叠?



