随着项目不断的迭代 , 代码愈来愈臃肿 , 人员也愈来愈多 , 同时在一个 module 中共同开发 , 首先来讲维护成本极高 , 不易管理扩展 , 如今就有了模块化的思想 , 把模块之间共用的代码(网络框架, 图片框架, 异步框架, 日志框架, 显示小部件 View 等),不一样的功能。抽取成单独的 core module 和多个功能 module 。这样每一个人负责本身的 module 开发,便于管理,协同开发。java
当 module 愈来愈多,这又出现了一个问题,编译时间很长,为了解决这个问题,最后把每一个 module 作成可配置,支持单独调试,大大的提高了开发效率。android
在项目中根据不一样的功能需求,和共用的代码抽取出来,造成单独的 module , 这就是模块化。git
组件化是创建在模块化思想上的一次升级,一个变种。组件化原本就是模块化的概念,只是具备可变性,在线上环境是 module lib , debug 环境是 application 。组件化的单位是 applicationgithub
其实插件化也是基于模块化的思想,将一个完整的工程,按业务划分为不一样的插件,来化整为零,相互配合。插件化的单位是 apk , 能够实现对 apk 的动态加载,更新,比组件化更灵活。bash
在实现以前咱们先来看下最终效果吧网络
目录结构:app
效果:框架
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'
}
}
}
}
...
}
复制代码
切换以后就能够单独运行了。
将不一样业务代码抽离成单独的 module,而后在宿主 APP 中根据调试环境依赖。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) if (isModule) {
//对代码跟资源进行隔离
runtimeOnly project(path: ':modulea') runtimeOnly project(path: ':moduleb') } } 复制代码
这里若是有人对依赖方式不了解的话,能够看下面这张表
这里用到了个人轻量级 YEventBus 通讯框架,若是想详细了解怎么使用和原理的能够看下我以前写的这篇文章轻量级 EventBus 框架,根据 TAG 发送接收事件
UI 跳转框架这里我没有本身写,用的 alibaba 开源的组件化路由框架 ARouter
到这里我相信你们对组件化已经有了必定的了解, 咱们已经把组件化的模型搭建好了,如今能够根据本身的业务需求搭建一套属于本身项目上的组件化框架。
文章中全部代码已上传 GitHub YKComponent