android多模块 安卓模块是什么意思
模块化
在进入组件化之前,我们先说一下模块化。一个功能分为一个模块,例如登录模块,支付模块,广告模块。传统的开发模式中一个模块就是一个Module(也有不同模块放在不同包里面的情况)。
模块在功能上对代码进行了划分,但是在开发上任然存在问题。
例如
当 需要debug 某一个模块的时候此时我们必须编译整个项目,当项目比较大的什么会很耗时间。我们希望任何一个模块都可以单独运行,单独测试。
实际组件化话主要解决的就是上面这个问题,希望将每一个模块都可以单独开发,运行,测试,但是解决一个问题的同时也会出现新的一些问题,例如Moudle A 可以单独运行的时候App 就无法依赖Module A,因为Module A 可以单独运行表明Module A 是一个application 而不是一个library。换句话说App 只在必要的时候依赖Module A, 此时 App 就不可以直接使用Module A 里面的任何类,否则App 在不依赖Module A的时候必然报错。既然如此App 又该如何调转到Module A 内的页面呢?此时就需要一个中间件或者是一个框架,常见的就是ARoute。至于模块之间的传值等问题都包含在这里面了。
在模块化开发中,不同模块之间有的时候也存在依赖关系,例如Module A 需要跳转到Module B 里面的一个页面,第一种解决方案是Module A 直接依赖Module B,第二种是通过App 中转。
Module A 直接依赖Module B 这种方法最简单但增加了耦合无疑是不可取的,在组件化中既不需要直接依赖也不需要通过App 中转,此时框架就充当中转。
组件化
组件化的关键一步就是让某一个模块既可以作为一个application单独运行又可以作为一个library 引入到主模块,这一部分主要是通过gradle 实现。
一、新建Modules
1、新建Project,作为应用的主Module。
2、新建Module:"Common",类型选择"Android Library",作为所有其它Module的基础依赖库。
3、新建Module:"Home",类型选择"Android Library",依赖"Common"。
二、增加一个Flag
1、在gradle.properties文件中增加一个Boolen键值对
当isDebug为true时,每一个组件(Module)都可以单独运行,为false 的是组件作为library ,不可以单独运行。
2、修改app的build.gradle文件
implementation project(':common')
if (!isDebug.toBoolean()) {
implementation project(':loginmodule')
}
这段脚本的意思是在idDebug 为false 的时候依赖对应的module。也就是isDebug 为false 的时候运行App,module loginmodule 才会被编译打包进入apk,而isDebug 为true 的时候运行app,module loginmodule 不参与编译也就不会被打包进apk。
3、修改loginmodule 的build.gradle文件
3、处理配置文件
当我们新建一个library 的时候,此时它的配置文件是下面这个样子。
如果library 里面有activity的时候我们可以这样修改
最好不要设置application 标签的属性,否在编译期间app 下面的配置文件与module 下面的文件可能存在冲突等框,但是在 isDebug 为false的时候moudle可以作为一个应用单独运行,我们又希望设置一些属性,那么可不可以有连个配置文件,根据 isDebug 属性应用不同的配置文件呢?答案是可以。
在loginmodule下的build.gradle文件中配置AndroidManifest.xml。
4、修改application
library 情形下不需要applicationId ,单独运行的app 需要一个applicationId
这一步不是必须的,即使没有设置applicationId 也会有一个默认的applicationId。
三、模块之间通信。
前面说了各个组件之间不可以直接引用彼此的类,如果组件A 想要打开组件B 里面的一个页面那要怎么办呢?此时需要一个中间件或者说是一个框架来帮我们完成这些事。目前最常用的就是ARoute 框架。
-----------------------------------
android多模块 安卓模块是什么意思
转自https://blog.51cto.com/u_16099200/6590840