插件化以及热更新小结

参考:安卓App热补丁动态修复技术介绍——QQ空间终端开发团队

android分包方式:

1、dex分包;

2、插件化;


热更新相比插件化多做了两件事:

1、防止相关类打上CLASS_ISPREVERIFIED标签,就可以抢先加载旧的bug类;

2、热修复动态加载BaseDexClassLoader对象间接引用的DexElements;


总结:热修复是在插件化的基础上进行替换旧的bug类。


类加载最主要的是两个类:PathClassLoader和DexClassLoader

PathClassLoader只能去加载已经安装到Android系统中的apk文件

DexClassLoader可以用来从.jar和.apk类型的文件内部加载classes.dex文件


关于类是如何被打上CLASS_ISPREVERIFIED标签的?

虚拟机在启动的时候,会有许多的启动参数,其中一项就是verify选项,当verify选项被打开的时候,doVerify变量为true,那么就会执行dvmVerifyClass进行类的校验,如果dvmVerifyClass校验类成功,那么这个类会被打上CLASS_ISPREVERIFIED的标志!!

关于dvmVerifyClass类中的代码内容,主要是关于两个:

1、clazz->directMethods

2、clazz->virtualMethods

其中directMethods中涉及到的方法有statics方法、private方法、构造函数,而virtualMethods中涉及到的方法是override方法。

以上方法中直接饮用到的类和clazz都在同一个dex中的话,就会被打上CLASS_ISPREVERIFIED标签。

策略:往所有的类(Application除外)的构造方法中加入AntilazyLoad.class

不在Application中加入主要是因为dex分包也是在Application中加载的,如果在这里加载AntilazyLoad.class,势必会无法找到该类,就会有异常。

隐患:

当然了,android系统一开始设计CLASS_ISPREVERIFIED标签的意图肯定是为了提高性能,我们这样修改会不会对性能有所影响呢?不好说,但是因为现在很多大项目都已经采用了这种方式,性能问题应该是可以放心的


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值