Android 组件化架构

一、为什么项目要组件化

Android 组件化架构_第1张图片
单一工程模型图

      这个图是比较常见Android App架构,一个界面中存在大量的业务逻辑,而业务逻辑中有网络请求、数据操作等行为。项目是以业务逻辑划分的文件夹,并且业务之间是相互调用、高度耦合在一起的。 各个业务模块之间相互依赖,无法分离。

随着产品的迭代,业务越来越复杂,随之带来的是项目结构复杂度极度增加,此时就会有如下几个问题:

1、业务变化太快,单一的工程业务模块耦合度太高,牵一发动全身
2、对工程作任何修改都需要编译整个工程
3、功能测试和系统测试每次都需要进行
4、团队协作开发存在很多冲突,不得不花费时间和精力进行沟通,影响效率
5、不能灵活的对业务模块进行配置和组装

二、什么是组件化开发

        就是将一个App分成多个模块,每个模块都是一个组件(Module),开发过程中我们可以让这些组件相互依赖,或者单独调试部分组件等,但是最终发布的时候就是将这些组件合并成统一的Apk。

三、如何进行组件化开发

1、基本概念
a、lib组件和application组件 
        lib组件是指该组件属于app的一部分,可以供其他组件使用但本身不能打包成apk。
        application组件可以运行打包成apk。

b、组件化对App结构划分:App壳工程、业务组件、功能组件库

Android 组件化架构_第2张图片

        App壳工程:  负责管理各个业务组件,打包Apk,没有具体的业务功能。
        业务组件:    根据具体业务而独立形成的一个工程
        功能组件:    提供某些基本功能,比如core_log、core_net等。

c、集成模式和组件模式
          集成模式: 所有业务组件被“App壳工程”依赖,组成一个完整的App。
          组件模式: 可以独立开发业务组件,每一个业务组件就是一个App。

2、组件模式和集成模式之间的转换

      application属性:    apply plugin :‘com.android.application'
      library属性:          apply plugin : ’com.android.library'

        Android 项目中任何一个build.gradle文件中都可以把gradle.properties中的常量读取出来;  我们需要在gradle.properties中定义一个常量值isModule(是否是组件开发模式)。但是gradle.properties中的数据类型都是String类型,使用其他类型需要自行转换。(isModule.toBoolean())

3、组件之间AndroidManifest.xml合并问题

        组件模式和集成模式之间转换的是时候,AndroidManifest.xml也不同,组件模式下每一个组件都有application和launch Activity ,那么合并的时候就会有多个application和launch Activity。所以需要指定业务组件在不同模式下使用不同的AndroidManifest.xml。

4、组件之间通信的问题

      在组件化开发的时候,组件之间没有依赖关系,我们不能在使用显示调用来跳转页面了。因为组件化的目的就是为了解决模块间的强依赖问题,假如现在要从A业务组件跳转到B业务组件,并且需要携带参数,这时候该怎么办呢??这就需要用到“路由”这个概念。

你可能感兴趣的:(Android 组件化架构)