Kotlin搭建组件化应用模板

0.前言

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

1.问题

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

1.1每一个组件既能够单独测试又能够集成测试

1.2组件之间的方法调用

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

1.4部分集成测试

2.方案

2.1每一个组件既能够单独测试又能够集成测试

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

在module的build.gradle文件中,根据isRunAlone的值来肯定module的类型,application仍是libraryapp

同时每一个module当单独运行时还须要一个Activity做为默认启动时的activity,而在集成运行是是不须要的,因此咱们须要定义两个AndroidManifest文件框架

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

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

2.2组件之间的方法调用

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

定义servicefactory用来注入实现

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

在modulea中的application中实现注入gradle

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

在app的application的initModuleApp方法里

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

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

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

2.4部分集成测试

咱们须要的是组件之间彼此隔离,各个组件之间的类是不能直接饮用的,可是若是使用compile在app主组件中引用其余组件时,仍然能够直接使用其余组件的类。这个问题咱们能够经过 Gradle 提供的方式来解决,Gradle 3.0 提供了新的依赖方式 runtimeOnly ,经过 runtimeOnly 方式依赖时,依赖项仅在运行时对模块及其消费者可用,编译期间依赖项的代码对其消费者是彻底隔离的。

2.5其余问题

另外有些其余问题就是为了不资源名字重复致使不能编译经过,能够为每一个module的资源添加前缀,能够在build.gradle文件中添加resourcePrefix进行资源前缀检查

3.Demo

Github demo地址 Github

关注个人公众号

相关文章
相关标签/搜索