移动架构 (七) 人人都能看得懂的组件化框架模型

f68559412b0e3675ff9a9b1842f68477.md.png

为何要组件化?

随着项目不断的迭代 , 代码愈来愈臃肿 , 人员也愈来愈多 , 同时在一个 module 中共同开发 , 首先来讲维护成本极高 , 不易管理扩展 , 如今就有了模块化的思想 , 把模块之间共用的代码(网络框架, 图片框架, 异步框架, 日志框架, 显示小部件 View 等),不一样的功能。抽取成单独的 core module 和多个功能 module 。这样每一个人负责本身的 module 开发,便于管理,协同开发。java

当 module 愈来愈多,这又出现了一个问题,编译时间很长,为了解决这个问题,最后把每一个 module 作成可配置,支持单独调试,大大的提高了开发效率。android

模块化、组件化、插件化

模块化

在项目中根据不一样的功能需求,和共用的代码抽取出来,造成单独的 module , 这就是模块化。git

组件化

组件化是创建在模块化思想上的一次升级,一个变种。组件化原本就是模块化的概念,只是具备可变性,在线上环境是 module lib , debug 环境是 application 。组件化的单位是 applicationgithub

插件化

其实插件化也是基于模块化的思想,将一个完整的工程,按业务划分为不一样的插件,来化整为零,相互配合。插件化的单位是 apk , 能够实现对 apk 的动态加载,更新,比组件化更灵活。bash

如何实现组件化

在实现以前咱们先来看下最终效果吧网络

目录结构:app

c5646eb65f1c6562a15cd9ff019b3fc1.jpg

效果:框架

1. 组件支持单独调试(application , lib 切换)

1.1 项目 build.gradle 配置是否须要单独调试环境异步

ext {  
  	// extend 
    // false: 组件模式
    // true :集成模式
    isModule = false
}
复制代码

1.2 module 中 build.gralde 配置模块化

//根据isModule标签动态的切换 集成/组件模式
if (isModule){
    apply plugin: 'com.android.library'
}else{
    apply plugin: 'com.android.application'
}
复制代码
android{
...
defaultConfig {
        //资源配置
        sourceSets{
            main{
                //在组件模式下 使用不一样的manifest文件
                if(!isModule){
                    manifest.srcFile 'src/main/module/AndroidManifest.xml'
                    java.srcDirs 'src/main/module/java','src/main/java'
                }else{
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                }
            }
        }
		}
...
}
复制代码

6a838f529a684982bd0642ad4eb4ca75.png

切换以后就能够单独运行了。

2. 代码隔离

将不一样业务代码抽离成单独的 module,而后在宿主 APP 中根据调试环境依赖。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar']) if (isModule) {
        //对代码跟资源进行隔离
        runtimeOnly project(path: ':modulea') runtimeOnly project(path: ':moduleb') } } 复制代码

这里若是有人对依赖方式不了解的话,能够看下面这张表

3. 组件之间交互

这里用到了个人轻量级 YEventBus 通讯框架,若是想详细了解怎么使用和原理的能够看下我以前写的这篇文章轻量级 EventBus 框架,根据 TAG 发送接收事件

4. UI 跳转

UI 跳转框架这里我没有本身写,用的 alibaba 开源的组件化路由框架 ARouter

总结

到这里我相信你们对组件化已经有了必定的了解, 咱们已经把组件化的模型搭建好了,如今能够根据本身的业务需求搭建一套属于本身项目上的组件化框架。

文章中全部代码已上传 GitHub YKComponent

感谢

获得开源组件化框架

相关文章
相关标签/搜索