android 插件模式调研

前言:

          公司业务越来越大,apk包也是随着变大,而且每次开发功能都需要升级APK 版本才能到用户,而且还有一个版本覆盖的问题,对于运营来说比较不灵活,那么现在解决这样问题有两个方向,一个是插件方式,另一个是react native方式。

插件方式:

1、概念

Android 插件化 —— 指将一个程序划分为不同的部分,比如一般 App 的皮肤样式就可以看成一个插件

Android 组件化 —— 这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用 性较高的构件,比如图片缓存就可以看成一个组件被多个 App 共用

Android 动态加载 —— 这个实际是更高层次的概念,也有叫法是热加载或 Android 动态部署,指容器(App)在运⾏状态下动态加载某个模块,从而新增功能或改变某⼀部分行为

2、目前相关的开源实现对比

目前开源的插件化框架有:


功能对比:


上图是Small作者总结的图片,可以看出一些基本的支持能力的区别,也有一些主观,供参考

经过比较分析,目前我们把方案集中 以下三种方案:

1,DroidPlugin(360方案,手机助手在用)

优点:

       插件APK完全不需做任何修改,可以独立安装运行、也可以做插件运行。也就是说apk可以不用安装就运行..... 是不是像病毒。

       插件里面的Android四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件动态注册,这个是摆脱了新增一个插件需要宿主先定义支持的问题。

       API低侵入性:极少的API,宿主接入简单。

       超强隔离:插件之间、插件与宿主之间完全的代码级别的隔离:不能互相调用对方的代码。通讯只能使用Android系统级别的通讯方法,能在宿主暴露一些需要插件调用的页面,插件才可以通过系统的方式访问。

        资源完全隔离:插件之间、与Host之间实现了资源完全隔离,不会出现资源窜用的情况,当然这我与我们也是一个不方便的地方,就会出现我们的插件每一个都是一套独立的代码和资源,这样插件的包会相应的变大。

        插件的宿主实现是通过Android里面的动态代理的方式hook 了系统的很多API 方法 ,欺骗了系统,突破了很多系统的限制,可以说是一套黑科技解决方案。 因为是hook系统,所以会有适配性问题,但是据说360手机助手插件运行的已经比较稳定了,填了很多坑,这块可以暂不担心吧.. 以后新版本Android系统如果更改了则需要重新适配,目前来看6.0以下都没有问题。

缺点:

         无法在插件中发送具有自定义资源的Notification。

         无法在插件中注册一些具有特殊Intent Filter的Service、Activity、BroadcastReceiver、ContentProvider等组件以供Android系统、已经安装的其他APP调用。

         缺乏对Native层的Hook,对某些带native代码的apk支持不好,可能无法运行。就是 说插件尽量简单,不能包含.so 的动态库,这块支持不好。

          插件和插件,插件和宿主之前共享资源需要解决。

2,DynamicAPK (携程方案,携程旅行APP在用)

优点:

        迁移成本较少,不是通过代理的方式实现,不需要改动太多现有工程的代码。

        提升编译速度 ,修改了APPT 过程,这个待验证。

        Hot fix (包含代码和资源,附件功能)

        按需下载和加载任意功能模块(包含代码和资源)

缺点:

         插件工程不支持so库。

         插件工程支持lib工程依赖、aar依赖、maven远程依赖等各种高级依赖特性。(对于我们改动较大)

3,small  (个人开发者,解决思路不同,有优点)

优点:        

        共享资源文件,支持联调插件

        加载.so后缀插件

        加载非独立插件

        解决方案比较小,核心代码简单。

         社区解决问题比较活跃

缺点:

        没有经过商业项目验证,版本才到0.9 

        很多功能在不断完善,bug 比较多。

4,VirtualApp

类似LBE平行空间,VirtualApp是一个App虚拟引擎的开源实现。 VirtualApp在你的App进程内创建一个虚拟空间,你可以在虚拟空间内任意的安装、启动和卸载APK, 这一切都与外部隔离,就如同一个沙盒。VirtualApp亦是一个插件化框架,运行在VirtualApp的插件不需要任何的约束

总结:

            比较下来看,觉得DroidPlugin 可以作为优先选择,DroidPlugin 本身的宿主和插件,插件和插件之前有着比较清晰的界限,彼此的通信方式清晰,插件和宿主之间,插件和插件之间的不能相互影响,这里面就会省去我们很多宿主,插件的版本管理和兼容问题,虽然这回带来资源冗余的问题,这可以通过我么我们的产品策略和实现流程规避掉,比如更多资源放置网络上,或是做一个插件公用资源包让用户第一次来下载。至于代码层面的冗余这块对包的大小影响不大,可以不计,另外DroidPlugin 在适配这块基于360助手的适配面,我们使用会少很多适配的工作,目前DroidPlugin 基本集成已经炉石在项目上测试下,插件也宿主之间的页面页面之前的调用已经OK,资源的共享的方式可以通过资源包的方式解决,至于这里面还会有哪些坑,只有在使用过程中慢慢解决。另外在DroidPlugin和腾讯的IM SDK 不兼容,这个还要想办法解决。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容