热修复技术实践之类加载方案

项目地址
类加载方案的原理是在app重新启动后让Classloader去加载新的类。因为在
app运行到一半的时候,所有需要发生变更的类已经被加载过了,在Android上是
无法对一个类进行卸载的。如果不重启,原来的类还在虚拟机中,就无法加载新类。
因此,只有在下次重启的时候,在还没走到业务逻辑之前抢先加载补丁中的新类,这
样后续访问这个类时,就会Resolve为新类。从而达到热修复的目的。

将修复好的dex文件push到SD卡,模拟从服务器下载

adb push /Users/keecham/Desktop/classes2.dex /sdcard

复制dex到私有目录

FileUtils.copyFile(sourceFile, targetFile);

加载修复后的dex文件

FixDexUtils.loadFixedDex(this);

apk 安装时,系统会使用 PathClassLoader 来加载apk文件中的dex,PathClassLoader的构造方法中,调用父类的构造方法,实例化出一个 DexPathList ,DexPathList 通过 makePathElements 在所有传入的dexPath 路径中,找到DexFile,存入 Element 数组,在应用启动后,所有的类都在 Element 数组中寻找,不会再次加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值