Kotlin搭建组件化应用模板

0.前言

随着版本的迭代,项目可能越来越臃肿,越来越复发,编译起来也很耗时。这个时候组件化开发就体现出优势了,每个组件也就是每个module可以单独运行,单独编译单独测试,这为项目的开发和测试节约了不少时间。

1.问题

组件化开发需要解决的问题:

1.1每个组件既可以单独测试又可以集成测试

1.2组件之间的方法调用

1.3组件间activity的跳转和fragment的使用(router)

1.4部分集成测试

2.方案

2.1每个组件既可以单独测试又可以集成测试

每个module建立一个gradle.properties文件,定义gradle变量isRunAlone用来控制当前控件时在单独测试还是集成测试

在module的build.gradle文件中,根据isRunAlone的值来确定module的类型,application还是library

同时每个module当单独运行时还需要一个Activity作为默认启动时的activity,而在集成运行是是不需要的,所以我们需要定义两个AndroidManifest文件

不要忘记单独测试时为module指定applicationId

 if (isRunAlone.toBoolean()) {
            applicationId "com.skateboard.modulea"
        }
复制代码

2.2组件之间的方法调用

由于组件间是彼此隔离的,为了调用其他组件的方法,我们这里定义了一个基本组件core,每个组件都引用这个组件,在core组件里定义其他组件对外提供的方法,在其中注入其他组件里对接口的实现。 首先定义modulea的接口

定义servicefactory用来注入实现

最后就是在modulea中对接口的实现了

在modulea中的application中实现注入

大家都知道,多个module情况下,只有主module也就是声明为application的那个module的application会被初始化,那么如何调用其他module进行接口实现的注入呢?答案就是利用反射 首先定义ModuleConfig,指定每个application的类名

在app的application的initModuleApp方法里

一次调用每个application的initModuleApp方法,这样就实现了注入

2.3组件间activity的跳转和fragment的使用(router)

这里采用了阿里的ARouter框架作为路由框架,需要注意的是使用kotlin时需要将build.gradle文件中的annoationprocessor改为kapt

2.4部分集成测试

我们需要的是组件之间彼此隔离,各个组件之间的类是不能直接饮用的,但是如果使用compile在app主组件中引用其他组件时,仍然可以直接使用其他组件的类。这个问题我们可以通过 Gradle 提供的方式来解决,Gradle 3.0 提供了新的依赖方式 runtimeOnly ,通过 runtimeOnly 方式依赖时,依赖项仅在运行时对模块及其消费者可用,编译期间依赖项的代码对其消费者是完全隔离的。

2.5其他问题

另外有些其他问题就是为了避免资源名字重复导致不能编译通过,可以为每个module的资源添加前缀,可以在build.gradle文件中添加resourcePrefix进行资源前缀检查

3.Demo

Github demo地址 Github

关注我的公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值