Small
Small copied to clipboard
旧项目集成Small遇到了很多坑,能不能给个集成Small插件化的最佳实践?
能不能给个集成Small插件化的最佳实践?
老项目其实并不老,也就大半年历史,100K+ java代码量,已经用了multidex。 主要有这几个问题: 老项目代码应该放在宿主App,还是放在插件App里面? 如何把用到第三方库拆分出来,放在lib里面吗?lib的dex是如何被app使用的? 百度地图SDK等是否可以做成插件lib?
@galenlin 老项目集成small插件确实是个头疼的问题,有没有好的建议
@offbye, @Carlos2927
基本原则
宿主中不要放业务逻辑。只做加载插件以及调起主插件的操作。
重构步骤
1. 拆lib.* - 公共模块插件
- 把各个 第三方库 拆出来做成一个个
lib.*插件模块,包括统计、地图、网络、图片等库。 - 把老项目积累的 业务公共代码 (utils)分离出来封装成一个
lib.utils插件 - 把基础的样式、主题分离出来封装成一个
lib.style插件
2. 拆app.* - 业务模块插件
- 把业务模块拆成
app.*模块,他们可以依赖lib.*模块,显示调用lib.*中的各个API - 相对独立的业务模块先拆,比如“详情页”、“关于我们”,如果剩下的业务不好拆,先放一个插件里
- 如果都不好拆,先把全部业务做成一个
app.main主插件
3. 下沉宿主 - 宿主分身模块
宿主分身模块要求以 app+* 格式命名,他们将被宿主、lib.*、app.* 模块自动依赖并允许这些模块透明地访问自己的代码或者资源。需要注意的是,分身模块最终是并入到宿主的而非插件,建议使用分身的情形有:
- 必须在宿主占坑的manifest,包括:
- 受限 Activity
- 包含了暂不支持的属性:process, configChanges 等
- 可能使用 FLAG_ACTIVITY_CLEAR_TOP 标签来启动 (#415)
- 任何 Provider, Service, BroadcastReceiver
- 受限 Activity
- 必须在宿主占坑的资源,包括:
- 转场动画
- 通知栏图标、自定义视图
- 桌面快捷方式图标
- 确信稳定的公共库与资源
Sample示例
- lib.style - 公共主题
- lib.utils - 公共API、公共控件
- lib.analytics - 第三方统计
- app.main - 主插件
- app.home - 首页
- app.detail - 详情页
- app+stub - 占坑组件、资源
“宿主工程不能有任何依赖lib的动作。”
这个让我查了好久,共勉!
如果要加入百度地图功能,是要将百度地图的sdk放入宿主中吗?