热修复原理概要总结

本文深入解析热修复技术的三大核心:资源热修复如InstantRun方案,代码热修复分为类加载方案、底层方案及InstantRun方案,以及动态链接库修复原理。涵盖了热修复在不同场景下的应用,包括腾讯系的微信Tinker、阿里系的AndFix,以及Robust和Aceso等。

热修复原理

1.InstantRun方案资源热修复

替换所有的Resource的mAssets为新创建的AssetManager

 

2.代码热修复

2.1 类加载方案

替换或者放到第一位,DexPathList的成员Element数组dexElements,需要重启,是以腾讯系为主,包括微信的Tinker 、QQ 空间的超级补丁、手机QQ 的QFix 、饿了么的Amigo 和Nuwa 等。
 

2.2 底层方案

整体或局部替换ArtMethod,不需要重启,阿里系,包括AndFix 、Dexposed 、阿里百川 、Sophix 。

2.3 InstantRun方案

每个类的方法都注入相关的修复代码,有Robust 和Aceso

 

3.动态链接库的修复

热修复框架的so 的修复的主要是更新so,换句话说就是重新加载so,因此so 的修复的基础原理就是加载so 。System.load与System.loadLibrary最终都会调用 nativeLoad(fullFilePath , loader , librarySearchPath);

3.1 System.load(fullFilePath)

调用System 的load 方法来接管so 的加载入口。

3.2 System.loadLibrary(libName)

so 的修复的一种方案, 就是将so 补丁插入到DexPathList的NativeLibraryElement 数组的前部,让so 补丁的路径先被返回,并调用Runtime 的doLoad 方住进行加载, 在doLoad 方法中会调用native 方法nativeLoad。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值