组件化开发,插件化开发和热修复

插件化开发和热修复

共同原理:
都使用ClassLoader来实现的加载的新的功能类,都可以使用PathClassLoader与DexClassLoader
不同的是:
  热修复因为是为了修复Bug的,所以要将新的同名类替代同名的Bug类,要抢先加载新的类而不是Bug类,所以多做两件事:在原先的app打包的时候,阻止相关类去打上CLASS_ISPREVERIFIED标志,还有在热修复时动态改变BaseDexClassLoader对象间接引用的dexElements,这样才能抢先代替Bug类,完成系统不加载旧的Bug类
  而插件化只是增肌新的功能类或者是资源文件,所以不涉及抢先加载旧的类这样的使命,就避过了阻止相关类去打上CLASS_ISPREVERIFIED标志和还有在热修复时动态改变BaseDexClassLoader对象间接引用的dexElements

  所以插件化比热修复简单,热修复是在插件化的基础上在进行替旧的Bug类

 

 

 

Android组件化和插件化开发

插件化是在[运行时],而组件化是在[编译时]。换句话说,插件化是基于多 APK 的,而组件化本质上还是只有一个 APK。

设置   apply plugin: 'com.android.application'   是主模块
apply plugin: 'com.android.library'              是library

组件式开发   

http://www.open-open.com/lib/view/open1481772233714.html

http://www.jianshu.com/p/bb30c31de505

 

插件式开发  DexClassLoader 加 Activity 代理

DroidPlugin 

 

https://github.com/Qihoo360/DroidPlugin

Small 
https://github.com/wequick/Small

VirtualAPK 
https://github.com/didi/VirtualAPK

RePlugin 
https://github.com/Qihoo360/RePlugin

总结

从个人感觉来说,如果工程量不大,又对多进程没有太多的想法的工程完全可以优先使用Small。而如果整个工程量大,以后又可能使用多进程,追求稳定的大型项目还是推荐RePlugin

这里如果好奇AppCompat应该如何兼容的读者可以看看:
红橙Darren:https://www.jianshu.com/p/e359fafe5c29

还有对我的插件化基础模型感兴趣的可以去我的github上:
https://github.com/yjy239/HostApplication

 

 

热修复

 

阿里开源的热修复框架AndFix热修复框架地址

 

 

 

Android中有两个类加载器,分别为PathClassLoaderDexClassLoader。其中我们正常开发的APP使用的类加载器就是PathClassLoader系统类和应用类的加载器

DexClassLoader:能够加载未安装的jar/apk/dex 
PathClassLoader:只能加载系统中已经安装过的apk   multidex-谷歌官方推荐的一个分包方式

 

 

原理方案
Native hook方案,方法替换Instant Run的热插拔原理,native层造成的问题就是兼容性问题AndFix
QQ空间提出的Classloader替换类的方案Nuwa, HotFix, RocooFix
Instant Run的冷插拔原理的Dex替换,DexClassLoader,吧旧的dex和补丁dex融合形成新的dex,确定需要重启Tinker

 

 

multidex分包原理

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值