插件化
为什么还要用插件化呢?插件化开发总的来说有以下几点好处(不同插件框架不一样):
- 宿主和插件分开编译
- 并发开发
- 动态更新插件
- 按需下载模块
- 方法数或变量数爆棚
处境
开放出来的插件化开发框架比较多,他们各自都有自己的优势和和不足,实现的原理也有差别下面列
开源的插件化框架
- Qihoo360/DroidPlugin
- CtripMobile/DynamicAPK
- mmin18/AndroidDynamicLoader
- singwhatiwanna/dynamic-load-apk
- houkx/android-pluginmgr
- bunnyblue/ACDD
- wequick/Small
- ……
目前开源的这几个框架有宿主和插件分离的也有融合在一起的,每个框架的详细介绍和demo在github里都可以查看到。插件化demo运行起来比较简单,但是真正将它用到实际项目中还是要考虑很多小细节的,目前我也正处于研究阶段。
携程插件化框架
ACDD插件化框架
360插件化框架
Android-Plugin-Framework
DL APK动态加载框架
部分框架对比
迁移成本很重:需要使用『that』而不是『this』,所有activity都需要继承自proxy avtivity(proxy avtivity负责管理所有activity的生命周期)。
无法启动apk内部的activity。
不支持Service和BroadcastReceiver。
迁移成本很重:
使用资源时要用
MyResources.getResource(Me.class)
而不是context.getResources()
使用Fragment作为UI容器,所有每个页面都是使用Fragment而不是Activity,需要使用URL mapping才能实现页面跳转。
未经过生产环境App测试。
不支持Service和BroadcastReceiver。
DroidPlugin from 奇虎360
非常有趣的框架!DroidPlugin能够在一个App内启动一个没有安装的App。这个特性可能更适合360的安全产品,因为被启动的App和宿主App完全没有任何关联,相互间不能支持资源和代码调用。
不支持自定义推送栏。