手把手教你撸一个简单的模块化框架项目

先上代码ModuleDemo

1. 什么是模块化

将一个APK拆分成多个模块(组件)进行开发,开发阶段可以独立测试,通用模块可以重复使用,开发完成之后可以将所有模块(组件)整合为一个完整的APK。

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'
}

用来判断当前模块是APP还是lib

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/**'
               }

            }
        }
    }

配置AndroidManifest

4. 组件之间资源命名冲突

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

  resourcePrefix "modulea_"//modulea_根据自己的module进行命名

资源冲突解决方式

5. 组件之间Activity的跳转、数据传递、Fragment的使用
  1. Activity的跳转和Fragment的使用我们可以使用第三方框架ARouter,这里我不多说,不会的可以去网上搜怎么使用
  2. 数据传递也可以使用EventBus

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值