Skip to content

旧项目集成Small遇到了很多坑,能不能给个集成Small插件化的最佳实践? #207

Open
@offbye

Description

@offbye

能不能给个集成Small插件化的最佳实践?

老项目其实并不老,也就大半年历史,100K+ java代码量,已经用了multidex。
主要有这几个问题:
老项目代码应该放在宿主App,还是放在插件App里面?
如何把用到第三方库拆分出来,放在lib里面吗?lib的dex是如何被app使用的?
百度地图SDK等是否可以做成插件lib?

Activity

Carlos2927

Carlos2927 commented on Jul 9, 2016

@Carlos2927

@galenlin 老项目集成small插件确实是个头疼的问题,有没有好的建议

galenlin

galenlin commented on Jul 9, 2016

@galenlin
Member

@offbye, @Carlos2927

基本原则

宿主中不要放业务逻辑。只做加载插件以及调起主插件的操作。

重构步骤

1. 拆lib.* - 公共模块插件

  1. 把各个 第三方库 拆出来做成一个个lib.*插件模块,包括统计、地图、网络、图片等库。
  2. 把老项目积累的 业务公共代码 (utils)分离出来封装成一个lib.utils插件
  3. 把基础的样式、主题分离出来封装成一个lib.style插件

2. 拆app.* - 业务模块插件

  1. 把业务模块拆成app.*模块,他们可以依赖lib.*模块,显示调用lib.*中的各个API
  2. 相对独立的业务模块先拆,比如“详情页”、“关于我们”,如果剩下的业务不好拆,先放一个插件里
  3. 如果都不好拆,先把全部业务做成一个app.main主插件

3. 下沉宿主 - 宿主分身模块

宿主分身模块要求以 app+* 格式命名,他们将被宿主、lib.*app.* 模块自动依赖并允许这些模块透明地访问自己的代码或者资源。需要注意的是,分身模块最终是并入到宿主的而非插件,建议使用分身的情形有:

  1. 必须在宿主占坑的manifest,包括:
    1. 受限 Activity
      1. 包含了暂不支持的属性:process, configChanges 等
      2. 可能使用 FLAG_ACTIVITY_CLEAR_TOP 标签来启动 (AddFlags 启动异常 #415)
    2. 任何 Provider, Service, BroadcastReceiver
  2. 必须在宿主占坑的资源,包括:
    1. 转场动画
    2. 通知栏图标、自定义视图
    3. 桌面快捷方式图标
  3. 确信稳定的公共库与资源

Sample示例

  1. lib.style - 公共主题
  2. lib.utils - 公共API、公共控件
  3. lib.analytics - 第三方统计
  4. app.main - 主插件
  5. app.home - 首页
  6. app.detail - 详情页
  7. app+stub - 占坑组件、资源
JuanbingTeam

JuanbingTeam commented on Jul 22, 2016

@JuanbingTeam

“宿主工程不能有任何依赖lib的动作。”

这个让我查了好久,共勉!

wangjiujiu

wangjiujiu commented on Oct 23, 2017

@wangjiujiu

如果要加入百度地图功能,是要将百度地图的sdk放入宿主中吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @offbye@galenlin@JuanbingTeam@Carlos2927@wangjiujiu

        Issue actions

          旧项目集成Small遇到了很多坑,能不能给个集成Small插件化的最佳实践? · Issue #207 · wequick/Small