1.为什么要组件化
(1)耦合严重:单一工程的业务之间耦合度太高,牵一发而动全身
(2)编译时间慢: 对工程的任何更改都必须编译整个工程
(3)测试麻烦:功能测试和系统测试每次都要进行
(4)开发效率不高:共同开发时容易产生冲突
(5)不够灵活:不能灵活的对业务模块进行配置和组装;
2.组件化介绍
组件化就是一个完整的app拆分成多个子模块每个子模块可以独立的编译或者运行,可以任意组合成另一个新的app或者模块,每个模块之间几部想不依赖有可以相互交互 。
组件化的基本组成:
(1)app壳工程:就是一个空的工程,负责打包apk没有具体的业务功能
(2)业务组件:每个业务模块单独出来可以形成一个独立的工程
(3)common组件:为每个业务模块提供公共的组件 如 工具类 网络类的封装
(4)三方组件:把一系列的三方类的功能集合在一起形成的组件 如 微信支付+支付宝支付 +其他三方支付= 支付组件
3.组件化实施流程
由于是之前自己独立开发的一个比较小的工程,所有逻辑也是自己写的所以实施组件化起来还是比较方便的,因为是重构以前的工程而不是重写 所以需要一步步的进行 从开始学习开始 到最后的组件化完成 差不多一周时间 。
(1)拆解工程 提取commonLibrary模块
我们在提取过程中要做的事情
1.为了保证每个业务组件的版本的统一个模块是否模块化的开启
添加统一的引用的gradle config.gradle 在这里吧原来使用的引用和版本都添加进来
/**
* 全局统一配置文件
*/
ext {
//true 每个业务Module可以单独开发
//false 每个业务Module以lib的方式运行
//修改之后需要Sync方可生效
isModule = false
//版本号
versions = [
applicationId : "com.example.componentapplication", //应用ID
versionCode : 1, //版本号
versionName : "1.0.0", //版本名称
compileSdkVersion : 28,
buildToolsVersion : "28.0.3",
minSdkVersion : 17,
targetSdkVersion : 23,
androidSupportSdkVersion: "28.0.0",
constraintLayoutVersion : "1.1.1",
runnerVersion : "1.0.1",
espressoVersion : "3.0.1",
junitVersion : "4.12",
annotationsVersion : "24.0.0",
javaSDKVersion : 1.8,//javaSDK版本
multidexVersion : "1.0.2",
butterknifeVersion : "9.0.0",
arouterApiVersion : "1.4.0",
arouterCompilerVersion : "1.2.1",
arouterannotationVersion: "1.0.4",
gsonVersion :"2.4",
//rxjava 家族和网络请求
r