Android 项目实战:组件化与集成化

什么是组件化?

回答这个问题前,我们先假设一个场景:

随着公司业务越来越好,原先的App团队开始划分为多个业务小组,例如:用户组(负责维护用户信息相关业务,如:登录、注册等)、商城组(负责维护商城订单相关业务,如:订单列表、下单、订单详情等)…

某日下午,用户组小A气势汹汹来到商城组小B面前。

用户组小A:你怎么修改了我用户详情接收的参数数据?

商城组小B:你那写的什么玩意,调你的详情传递订单用户信息都找不到入口,当然得改。

用户组小A:那你也不能擅自修改啊,现在其他模块一调就蹦。

商城组小B:项目急着上线,加班到大半夜,哪有时间找你!

于是,俩人撕打在了一起,你作为移动端大哥,目睹眼前一切,脑海中不经飘过一个念头:“本是同根生,相煎何太急”。

!!!~不对,不对,以下才是你真实想法:

有没有方法能完全隔离各部门之间的业务模块,通讯之间通过一定协议规则来约束,业务部门开发过程中只专注自己的模块,从物理上杜绝跨业务修改代码?

Library?

对了,能不能让所有的业务子模块变为Library,提供给App主模块引用,各部门只负责编写自己的业务Library?

但Library不能像App主模块一样自主编译调试,如果在App主模块里开发完再抽取成Library显然是不可取的,能不能在开发过程中让业务部门的Library是个自主运行的Module,打包上线时再转换为供App主模块引用的Library?

带着疑问,你打开Android Studio创建一个app主模块,又建了个供其依赖的user模块的Library,查看它们之间有什么不同。

Android 主Module 与 Library配置上有什么区别?

经过你细心查看,发现以下两个文件有所不同:

1、build.gradle配置信息不同

2、AndroidManifest.xml配置信息

于是乎,你照猫画虎的将user子模块改成与App主模块一致:

经过你的努力,user子模块成功转换为一个可执行的Module,并完美运行起来:

OK , 到这你已经手动完成Library转换为可执行Module的整个过程,反过来将一个Module转换为Library,相信你也手到擒来。

不妨总结下,将Library转换为可执行Module的过程,称之为**“组件化”过程,转换为组件后,业务部门对其进行开发,开发完毕再转换为Library供app主模块引入,最终打出完整的apk包,这个过程称之为“集成化”**过程。

如何做到自动化转换?

显然,如果开发中手动去做转换,这样的体验很糟糕,且极易出错,不妨交给Gradle试试。

以上面为例,app作为主模块,user作为子模块,我们先用Gradle将这两个模块涉及到的依赖以及版本信息统一管理起来,歩奏大致如下:

  • 1、在项目根目录创建config.gradle文件;
  • 2、配置版本依赖库相关信息;
  • 3、并在项目根目录的build.gradle中将其导入。

(相关代码已贴在下方)

// config.gradle文件内容:
ext {
   

    // true 组件化环境,将所有业务Library组件化为可执行Module,供开发人员开发
    // false 集成环境,将所有可执行Module集成化为Library,打包到App主模块里
    isComponent = false

    kotlin_version = "1.3.72"
    ktx_version = "1.3.2"
    appcompat_version = "1.2.0"
    material_version = "1.2.1"
    constraintlayout_version = "2.0.4"
    kotlin_mvp_version = "1.2.1"

    //App编译环境 字典配置
    application = [
            compileSdkVersion: 30,
            buildToolsVersion: "30.0.2",
            minSdkVersion    : 16,
            targetSdkVersion : 30
    ]
    //各模块AppId 字典配置
    appId = [
            app : "com.ljb.myapp",
            user: "com.ljb.myapp.user"
    ]

   //各模块引入的第三方公共库 字典配置
    dependenciesImport = [
            kotlin_stdlib   : "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version",
            ktx             : "androidx.core:core-ktx:$ktx_version",
            appcompat       : "androidx.appcompat:appcompat:$appcompat_version",
            material        : "com.google.android.material:material:$material_version",
            constraintlayout: "androidx.constraintlayout:constraintlayout:$constraintlayout_version",
    ]

}
// 项目根目录build.gradle导入config.gradle:
apply from: "config.gradle"    

buildscript {
   

    repositories {
   
        jcenter()
        google()
    }
    ...

每个模块的build.gradle配置完后,大致如下(以app主模块为例):

//app主模块build.gradle中的配置
plugins {
   
    id 'com.android.application'
    id 'kotlin-android'
}

def appId = rootProject.ext.appId
def application = rootProject.ext.</
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值