Android组件化开发

最近在学习Android组件化开发,自己写了一个demo,以此记录一点学习成果吧。我们在实际开发中,一个app一般都有很多个模块组成,一般的做法都是将这很多模块放入一个module中,随着我们的业务逻辑越来越复杂,开发调式并不是很方便,这时候我们就需要组件化,将每个模块都当作一个组件module,每个module都可以独立运行,这样既方便调式,也便于协同开发。下面我们就讲一下怎么来组件化。

首先来看一下项目的整体结构

Android组件化开发

在main app中需要持其他两个组件的依赖,直接添加会报错,因为组件也是可以单独运行的,所以要在gradle.properties文件中进行配置

Android组件化开发

接下来在main组件的gradle文件中进行配置,当作为组件时直接引入,作为项目时就不依赖

Android组件化开发

接下来在两个组件的gradle文件中进行配置,这里需要配置logincomponent为library还是application,编译版本compileSdkVersion,applicationId是否配置,以及minSdkVersion和targetSdkVersion,这是为了统一整个项目的编译和运行环境,这里还需要添加对commonlibs的依赖,这一步一定不能忘记哦。

Android组件化开发

配置完组件的gradle文件之后还需要配置一下AndroidManifest文件,logincomponent作为单独app运行时,这里需要单独建一个文件夹放入manifest文件

Android组件化开发

当logincomponent作为组件时manifest需要如下配置

Android组件化开发minecomponent的配置和logincomponent是一样的。至此,我们的组件基本环境已经配置完毕,接下来就是组件和main app怎么通信,直接从main app中跳转到组件?当然这样也是可以的,但是这样的话main app和组件的耦合度就太高了,所以我们就需要找一个中介commonlibs,用它来负责main app和组件的通信。作为一个完整的app来说,我们的入口只有一个,因此我们application也只能有一个,所以我们需要将所有组件的application管理起来。

Android组件化开发

这里主要将组件的app名称添加进来,接下来在每个组件的application中初始化application对象,我们定义一个接口,让所有组件的application来实现

Android组件化开发

在main app中进行初始化,这里通过反射来调用IAppcomponent的init方法将当期的application传入,这样就保证所有组件持有的application对象为main app

Android组件化开发

接下来我们就来实现mainapp和组件间的通信,我们在libs中定义一个接口

Android组件化开发

主要有两个方法,一个是activity跳转的方法,一个是展示fragment的方法,那么谁来实现此接口呢?当然是我们的logincomponent

Android组件化开发

看到这里,大家是不是很熟悉这一段代码,就是我们activity跳转的标准代码,接下来我们需要一个serviceManager来管理这些页面跳转的service

Android组件化开发

然后需要在组件的app中需要进行初始化

Android组件化开发

接下来在我们的mainapp的activity实现跳转到logincomponent的入口activity

Android组件化开发

补充一下每个组件都需要添加对commonlibs的依赖,这样我们一个组件化的小demo就写完了。最后附上源码https://github.com/allenlzhang/CarltComponentDemo