2. 为什么会出现模块化

在我门进行项目的开发过程中,随着业务的不断增加、代码量越来越多、具有相同功能或者模块出现。从而就会导致以下问题的发生。
1. 各种业务耦合在一起,不利于后期开发人员的维护。
2. 一个小小的改动需要全局编译,而且编译时间过长,浪费时间。
为了解决以上问题,所以就出现了模块化。

3. 为什么要使用模块化

  1. 模块化可以模块解耦、避免模块耦合、提升团队的开发效率。
  2. 单独模块可以独立运行、单独模块不依赖其他模块、结构清晰、层次明显、减少维护成本与开发时间。
  3. 每个组件业务可以由开发者自行决定采取MVP/MVC等架构,而不影响整体项目架构。
  4. 优秀的代码、组件可以快速的移植使用。

4. 实际操作

1. 创建版本控制

在我们开发过程中,可能多个模块之间会使用到相同的配置例如编译版本,第三方依赖等,这些相同的东西后期如果需要更改,我们可能需要改很多地方,故可以写一个配置文件。

  1. 首先创建一个文件,起名叫config.gradle
    创建配置文件
  2. 创建好配置文件之后,接下来就是如何去写配置文件。
    配置文件的写法
  3. 写好配置文件,接下来就需要引用配置文件,因为我们这个配置文件需要整个项目都可以使用,故我们需要在整个项目的gradle中去引用。如图在project的gradle中添加下面代码即可。
apply from: "config.gradle"

配置文件引用
4. 引用完配置文件之后就是,如何去相应的gradle中使用了。红色框中就是在gradle中的使用方法。

1. rootProject.ext是固定不变的。 2. android 是之前写配制文件自己随便命名的东西 。 3. compileSdkVersion 是数组中的key。 compileSdkVersion rootProject.ext.android.compileSdkVersion

在相应的gradle中使用配置文件
好了版本控制文件的创建、书写、引用、使用,就已经完成了。

2. 动态切换lib和App模式

上面为什么使用模块化有提过,每个模块可以独立运行的,所以我没就需要对该模块进行设置,用了控制什么时候该模块是App什么时候该模块是lib

  1. 首先我们需要在之前的配置文件(config.gradle)中定义一个变量用来控制该模块是App还是lib
    定义用来控制该模块是App还是lib的变量
  2. 在相应模块的gradle中添加下面代码,用来判断是APP还是lib
if (rootProject.ext.isApp) {
    //当前模块为app
    apply plugin: 'com.android.application'
} else {
    //当前模块为lib
    apply plugin: 'com.android.library'
3. AndroidManifest的管理

同上,每个app在运行的时候,需要一个默认的启动页,而在lib中则是不需要的。所以app的AndroidManifest和lib的AndroidManifest是不一样的,所以我们就需要将lib和app的AndroidManifest分开写

  1. 创建AndroidManifest,我们在每个module的main目录下创建一个文件,这个文件就叫module用来存放App模式下的AndroidManifest,而之前的AndroidManifest则作为lib模式下的AndroidManifest
    分别创建app模式下的AndroidManifest和lib模式下的AndroidManifest
  2. 创建好AndroidManifest下来就是使用了,在相应的moudle的gradle添加下面代码
 sourceSets {
        main {
            if (rootProject.ext.isApp) {
                //  这里需要注意manifest.srcFile中的manifest的m为小写,大写M会报错,下面也是一样
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //  lib模式下,去除多余的debug包
               java{
                   exclude 'debug/**'
4. 组件之间资源命名冲突

我们知道有的时候,在不同的Module下,有可能存在着相同名称的资源,例如布局文件,颜色,等等,而出现上面的情况,就会导致我们app中不同module的资源冲突。解决方式就是在相应Module的gradle添加下面代码

  resourcePrefix "modulea_"//modulea_根据自己的module进行命名
5. 组件之间Activity的跳转、数据传递、Fragment的使用
  1. Activity的跳转和Fragment的使用我们可以使用第三方框架ARouter,这里我不多说,不会的可以去网上搜怎么使用
  2. 数据传递也可以使用EventBus

好了到这里就搭建好一个简单的模块化框架了,我这里只是说下怎么搭建模块化项目,至于项目中的的目录结构我没说多少,不同的人有不同的理解,无非就是多加几个Module。
最后贴上我自己写的代码
ModuleDemo

先上代码ModuleDemo1. 什么是模块化将一个APK拆分成多个模块(组件)进行开发,开发阶段可以独立测试,通用模块可以重复使用,开发完成之后可以将所有模块(组件)整合为一个完整的APK。2. 为什么会出现模块化在我门进行项目的开发过程中,随着业务的不断增加、代码量越来越多、具有相同功能或者模块出现。从而就会导致以下问题的发生。1. 各种业务耦合在一起,不利于后期开发人员的维护。... (2)在pom.xml 导入 依赖的jar包 (ssm) (3)在配置文件 ​ web.xml / applicationContext.xml /applicationContext-mvc.xml ​ db.properties log4j.properites (4)搭建 service 层 mapper层 contr... 关于模块化的好处在此省略1000字,网络资源很多不再赘述。从本人20多年多个行业众多项目经历来说,无论是一个人、两个人开发,还是多人协同开发,模块化在实际应用中有非常高的实效性。本文讨论的是源代码插件化框架思想,而非二进制Dll之类的插件化。如果没有特别说明,本文提及的插件和模块是同一个实体概念。 二、模块化原则 1、高度独立 要达到高度独立必须实行高 在上一篇对maven项目有了初步的了解。这一篇文章主要介绍一下大型项目通过Maven来拆分项目,进行项目模块化。为什么我们需要对大型项目进行模块化处理。 随着公司的业务发展和日益增长的需求,我们的项目会依赖更多的第三方组件,会在项目中加入更多的功能。例如阿里巴巴电商项目,最开始可能只是一个电商项目。但随着业务的壮大,加入ERP,支付,金融,客服,旺旺语音等。越来越多衍生出来的服务和功能  解决软件的复杂性问题,或说降低软件的复杂性。不至于随着变大而不可控二失败,使其可控、可维护、可扩展。  模块化是以分治法为依据。简单说就是把软件整体划分,划分后的块组成了软件。  这些块都相对独立,之间用接口(协议)通信,每个块完成一个功能,多个块组合可以完成一系列功能。 2.模块化的目的是什么? 2.1 提高工作效率  比如在项目A中你写一个模块,...
随着技术越来越成熟,这两年,组件化开发与插件化开发的热度一度高涨。对于组件化,有的人也喜欢称之为模块化开发,我也比较喜欢称之为模块化开发。使用模块化开发也已经有一段时间了,特此总结一下模块化开发的心得,防止以后忘记。 什么是模块化开发 对于模块化开发的概念,有的人可能还不是很了解,通俗的来讲就是: 将项目中的具体功能模块,如登录、个人中心等,拆分成一个一个单独的module, 将其中公用的功...
相信广大前端朋友们都遇到过这么一个问题?  什么是模块化模块化开发如何实现? 那么什么是模块化呢,时下流行的库与框架又有哪些在利用模块化进行开发呢? 今天我从以下两个方向来进行描述,如果描述不够准确,还请各位多多指正。 1.什么是模块化?    模块化就是讲js文件按照功能分离,根据需求引入不同的文件中。源于服务器端。 在前段开发中,最先出现在node.js中,commne.js中