前言
今年无疑是插件化火火火的一年,啊里、滴滴、360都先后开源了他们的插件化框架,好奇心重的我,也一个一个试着体验下了。声明,我并没有深入去阅读他们的源码,单纯的只是作为一个开发者的角度,去接入他们的框架使用。下面来说说我的使用感受:
简介
Atlas:https://github.com/alibaba/atlas/tree/master/atlas-docs
VirtualAPK:https://github.com/didi/VirtualAPK/wiki
RePlugin:https://github.com/Qihoo360/RePlugin/wiki
首先看看啊里的Atlas:
然后看看滴滴的VirtualAPK:
最后看看360的RePlugin:
对比
一、定义
从定义上说,Atlas定义为组件化,而VirtualAPK和RePlugin则定义为插件化。这两种还是有一点点不同的,组件化偏重于编译期,插件化偏重于运行期。换句话来说,Atlas在编译的时候是需要把bundle放在一起处理的,而后面两个则可以完全独立开,和开发新的一个apk一样,最后打包的时候配置一下就行。
二、接入难度
初次接入Atlas,那真的会有点懵逼,官方文档已经万年没更新的,GitHub上面的demo和文档上的好多都不一样,就算接入了,也会出现一堆问题,简直想死。想接入Atlas的,不妨看看我上一篇文章。VirtualAPK,滴滴这个,接入还算简单的了,文档也比较完善。RePlugin,360这个也挺简单的,宿主和插件分得很清楚。所以接入难度:RePlugin最快,VirtualAPK其次,Atlas最麻烦。
三、功能
三者都有的功能是远程bundle,按需加载。意思是项目中某个模块,打包的时候不打进apk,等你安装了,需要用到的时候再下载那个模块进行加载显示,从而减少apk的安装体积。Atlas会把插件打成so的形式,而VirtualAPK和RePlugin会打成apk的形式,都是放在内存卡,然后调用各自的安装加载方法就行。Atlas安装后,可以把so删掉,但VirtualAPK的apk需要一直在内存卡,否则是打不开的,而RePlugin安装后会自动备份一个apk到缓存目录。除了远程bundle功能,Atlas还有热修复的功能,可以不升级apk就实现宿主和组件的更新。
四、更新插件方式
Atlas更新插件的话,必须要和宿主一起,打差异补丁才能更新,而VirtualAPK和RePlugin是可以直接通过下载一个新的插件apk,然后调安装方法就能实现插件的更新。
五、插件独立性
Atlas前面说了,和宿主的依赖还是挺多,毕竟官方也强调是组件化,不是插件化。而VirtualAPK,它可以是一个独立的app,但插件里面也定义和宿主的关联,就是说这个插件apk并不能给其他宿主用,只能给插件里面声明的那个宿主使用。RePlugin呢,就比较独立了,里面不用声明和宿主的联系,所以你生成一个插件后,这个插件可以给其他宿主调用。
六、宿主和插件的公共库
如果宿主和插件都用到一些公共依赖库,比如http库,图片加载库,这个时候怎么处理?Atlas处理就简单了,毕竟是组件化,和宿主的项目都是在一起。可以在项目里面定义一个middleLibrary,这个库里面依赖一些公共的库或者资源,然后宿主和插件都依赖他就行了。VirtualAPK呢,由于插件里面要声明和宿主的关联,所以他会自动检测,如果插件中依赖的库,在宿主里面也有的话,他会自动去掉一个,不会重复。RePlugin是比较独立的,没有和宿主太多联系,所以目前大家的做法是宿主compile,插件 provided的形式,而共用资源的话,RePlugin是不提倡的了。
七、欢迎留言提问,我会继续回答补充
总结
以上仅仅是我个人的使用感受,有哪些地方你觉得不对,请及时指出来,我们互相学习。如果你的app需要热更新和插件的功能,推荐使用Atlas;如果你的app仅用到插件,在需要的时候才下载加载的话,你可以选择VirtualAPK和RePlugin;如果你的插件希望其他宿主也能用的话,那就只能RePlugin了,RePlugin就像一个应用市场,你的宿主仅仅是一个壳,然后把需要的插件下载加载使用就行,更新的话也无需更新宿主,直接更新插件就行。
题外话
接入demo和接入项目还是有挺大不同,demo跑通了,其实真正接入到项目使用的时候还会遇到一堆问题的。遇到问题怎么办,加群问吧。
VirtualAPK:QQ群 570158423
RePlugin:QQ群 653205923
Atlas:钉钉群