美文网首页
组件化方案实践总结

组件化方案实践总结

作者: 呵呵_9e25 | 来源:发表于2019-03-19 15:24 被阅读0次

    1.模块分离

    1.基础模块
    基础模块主要封装网络请求,日志框架,路由设置等信息

    1. 业务模块
      业务模块依赖基础模块,实现不同模块业务,比如聊天,支付

    3.app壳模块
    app壳模块集成所有模块用于打包整体app

    2.代码分离
    基础模块用api关键字实现代码模块共享
    业务模块使用implement实现模块内部代码引用
    app壳模块使用implement实现runtimeOnly关键字实现运行时代码可见

    3.资源区分
    不同模块在gradle里声明前缀,比如公共基础模块资源设置如下:

     resourcePrefix "public_" //给 Module 内的资源名增加前缀, 避免资源名冲突
    

    4.分模块运行设置

    if (isBuildModule.toBoolean()) {
        apply plugin: 'com.android.application'
    } else {
        apply plugin: 'com.android.library'
    }
    apply plugin: 'com.jakewharton.butterknife'
    

    在gradle.properties文件里声明一个变量来控制是否需要分模块运行

    #isBuildModule 为 true 时可以使每个组件独立运行, false 则可以将所有组件集成到宿主 App 中
    isBuildModule=true
    

    5.打包整体app
    在app壳gradle配置如下

     if (!isBuildModule.toBoolean()) {
            //在宿主 App 中使用 implementation 依赖业务组件, 业务组件的代码就会完全暴露给宿主 App, 不利于代码的隔离
            //使用 runtimeOnly 依赖业务组件, 可实现业务组件的代码在编译时对宿主 App 不可见, 仅在运行时对宿主 App 可见
            runtimeOnly project(":module_1")
            runtimeOnly project(":module_2")
            runtimeOnly project(":module_3")
        }
    

    6.模块间通讯
    通过接口下沉实现,然后利用Arouter实现数据和类型寻找
    方案:
    每个模块集成commonservice模块,commonservice主要暴露接口,具体实现类在每个模块内部,实现代码分离

    commonservice的接口声明代码实例如下

    public interface GankInfoService extends IProvider {
        GankInfo getInfo();
    }
    

    然后在对面模块的接口实现

    @Route(path = RouterHub.GANK_SERVICE_GANKINFOSERVICE, name = "干货集中营信息服务")
    public class GankInfoServiceImpl implements GankInfoService {
        private Context mContext;
    
        @Override
        public GankInfo getInfo() {
            return new GankInfo(ArmsUtils.getString(mContext, R.string.public_name_gank));
        }
    
        @Override
        public void init(Context context) {
            mContext = context;
        }
    }
    

    这样就可以通过Arouter去传递数据,而模块之间的跳转直接通过arouter的路由表去实现即可。

    7.注意:公共模块不宜太多代码,否则分模块运行时耗时不乐观,建议大多业务逻辑代码放在对应模块

    相关文章

      网友评论

          本文标题:组件化方案实践总结

          本文链接:https://www.haomeiwen.com/subject/wcogmqtx.html