转载

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

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

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

模块化、组件化、插件化

模块化

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

组件化

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

插件化

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

如何实现组件化

在实现之前我们先来看下最终效果吧

目录结构:

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

效果:

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

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'
                }
            }
        }
		}
...
}
复制代码
移动架构 (七) 人人都能看得懂的组件化框架模型

切换之后就可以单独运行了。

2. 代码隔离

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

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

这里如果有人对依赖方式不了解的话,可以看下面这张表

移动架构 (七) 人人都能看得懂的组件化框架模型
原文  https://juejin.im/post/5d5bcb85f265da03e369839d
正文到此结束
Loading...