一、为什么要模块化开发?
如果App代码量不大,业务量比较少,这时候没有必要进行模块化开发。但是如果App业务较多的时候,代码复杂,每个模块之间的代码耦合严重,结构臃肿,每个开发人员开发部分代码时会影响其他开发人员的模块,修改一处代码要编译整个工程,效率较低,这时候最好的办法就是进行模块化拆分。不同的人可以独立负责不同的模块,相互不影响。
二、项目架构设计
项目架构设计的思路主要分为主App、公共基础模块、业务处理模块
主App: 一个空壳app,本身不实现任何业务逻辑,主要用于将所有的模块打包成完整的release APK。
公共基础模块: 包含着各个模块都公用的基础组件,例如网络通信模块、事件通信模块、工具类等。
业务处理模块: 由各个开发人员负责自己开发的模块,尽量使不同的的业务模块相互不影响。
三、代码实现方案
在项目架构设计完成之后,每个开发人员单独负责自己开发的模块,这时候需要module能单独作为Application编译,在module开发完成之后验证没问题后加入到主App中。
3.1增加release和debug模式切换Flag
在gradle.properties文件中增加一个变量,当isDebug为true时,为Debug模式,其它的Module可以作为单独的App运行。当isDebug为false时,为Release模式,其它的Module为Library模式,不能单独运行,此时只有主App可以运行。
#是否处于Debug模式
isDebug = false
3.2 修改各个Module的build.gradle文件
在开发时,切换成application;在发布时,切换成library。
if (isDebug) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
3.3 修改app的build.gradle文件
在Release模式下,导入所有的组件
dependencies {
...
//公共基础模块
implementation project(':common')
if (!isDebug) {
implementation project(':moduleA')
implementation project(':moduleB')
implementation project(':moduleC')
implementation project(':moduleMain')
}
}
3.4 配置不同的AndroidManifest.xml
因为module需要在library和application之间切换,所以需要配置两套AndroidManifest.xml
sourceSets {
main {
if (isDebug) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
}