前言:插件化技术发展到现在其实已经很成熟了,但是相应的问题,如果没有真正地去实践过,根本不了解其中有多少问题,会牵涉到多少技术细节,多少被外人膜拜的外表光鲜的技术大牛都被『插件化』这三个字折磨地死去活来,这对于 Android 整个生态的损害也让人无法忽视。
一.Android插件化的细节:
1.在 Android 里有一个比较好的一点是,作为 library 的时候,aar 里的引用依赖,在宿主 Application 里也有同样的引用依赖,并不会打包两份到宿主 Application 里;
2.模块之间的跳转,除了使用别名的方式,我能想到的还有另外一种方式,同样是通过 gradle 脚本,将跳转用到的类打成一个 jar ,作为一个 API 服务提供给其他模块作为编译期依赖(provided)引入;
3.各个 library 在 debug 的时候作为 apk ,要独立打包运行测试,这时就需要有一个启动 Activity ,而 library 是不需要的,我的想法是放置两个 AndroidManifest.xml ,使用 sourceSets 分别在 debug 和 release 的时候加载不同的 AndroidManifest.xml。
二.开源插件化框架(框架详解及优缺点对比图如下:):
目前成熟的开源框架分别有
1. 360插件开发之DroidPlugin ,360开源全面插件化框架RePlugin
a.DroidPlugin是360手机助手在Android系统上实现了一种新的插件机制。它可以在无需安装、 修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定好 处。
b.RePlugin 是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的 RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的 方 案。
2.滴滴VirtualApk
a.VirtualAPK是滴滴在2017年6月开源的一款插件化框架,支持Android四大组件,以及几乎所有的Android特性,通过Gradle来构建插件,集成与构建十分便捷,目前已经应用在 滴滴出行App上,兼容市面上几乎所有的Android设备。
3.爱奇艺插件化原理分析之 Neptune框架
a.Neptune是爱奇艺移动端研发的一套灵活,稳定,轻量级的插件化解决方案。经过不断的研 发,迭代和线上验证,目前已经完全适配了Android P,能够在数亿的设备上动态加载和运行插件APK,为爱奇艺众多的垂直业务团队提供了稳定的服务。
4.腾讯插件化框架 Shadow
a.Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。Shadow不仅开 源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。更是具有复用独 立安装App的源码、零反射无Hack实现插件技术、全动态插件框架、宿主增量极小、Kotlin支持等特点。
特性 | RePlugin | VirtualAPK | Qigsaw | Shadow |
开源方 | 奇虎360 | 滴滴 | 爱奇艺 | 腾讯 |
支持四大组件 | √ | √ | √ | √ |
支持新增四大组件 | √ | √ | × | √ |
支持原生资源动态化 | √ | √ | √ | √ |
Flutter代码动态化 | √ | √ | √ | √ |
Flutter代码资源动态化 | × | × | × | × |
Hook方式 | 少 | 多 | 少 | 无 |
Android系统兼容 | 2.3-9.0 | 4.03-9.0 | 4.0+ | 4.0-12 |
厂商系统兼容性 | 低 | 中 | 中 | 高 |
多插件支持 | √ | √ | √ | × |
框架自身动态化 | × | × | × | √ |
接入难度 | 低 | 中 | 中 | 高 |