Android组件化--不一样的公共依赖管理方案

原创内容,转载请注明出处 https://my.oschina.net/ccmagic/blog/3037094

需求分析

最近在公司搞组件化,发现跟一般的只是在project的build.gradle中定义版本号或者单独定义一个gradle文件来管理所有版本号。 但是这样做还有一个问题:

1、 project的build.gradle中定义管理的话,会导致build.gradle文件很大,整体感觉有些凌乱。

2、单独定义的版本管理的gradle文件虽然统一了版本号,但是各个module的依赖还是要重复写,并且替换第三方依赖的时候,要修改每个module的build.gradle文件。当然也可以把整个依赖全称配置好,如下: versions.gradle文件

ext.deps = [:]

def deps = [:]
//
deps.room_runtime = 'androidx.room:room-runtime:2.0.0'
deps.room_compiler = 'androidx.room:room-compiler:2.0.0'
deps.room_rxjava2 = 'androidx.room:room-rxjava2:2.0.0'
deps.room_guava = 'androidx.room:room-guava:2.0.0'
deps.room_testing = 'androidx.room:room-testing:2.0.0'
ext.deps = deps

再在project的build.gradle中引入文件:

apply from: 'versions.gradle'

然后就可以在module的build.gradle中直接引用了

  //room
    implementation deps.room_runtime
    annotationProcessor deps.room_compiler
    implementation deps.room_rxjava2
    implementation deps.room_guava
    testImplementation deps.room_testing

3、 但是上面这么做,做统一版本管理和修改版本号都很简单,只要修改versions.gradle文件对应项就好了。但是,要是出现需要删除一些旧的依赖库或者添加新的依赖库还是要四处修改。这种机械的重复劳动是一个android开发不能忍受的。所以有了以下方案:

正题来了:

简单一点,我们为什么不能把添加公共依赖的代码放到一个公共方法里,让每个module的build.gradle中的dependencies {}中直接调用这个方法不是更好?像下面这样:

dependencies {
    rootProject.allModuleDependencies(dependencies)
}

要做到这一点:

1、 我们先自定义一个文件取名dependencies.gradle,在里面定义公共依赖方法:

static def allModuleDependencies(DependencyHandler dependencyHandler) {
    //room
    dependencyHandler.implementation 'androidx.room:room-runtime:2.0.0'
    dependencyHandler.annotationProcessor 'androidx.room:room-compiler:2.0.0'
    dependencyHandler.implementation 'androidx.room:room-rxjava2:2.0.0'
    dependencyHandler.implementation 'androidx.room:room-guava:2.0.0'
    dependencyHandler.testImplementation 'androidx.room:room-testing:2.0.0'
}
ext.allModuleDependencies = this.&allModuleDependencies

2、 然后在project的build.gradle的buildscript中添加代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    apply from: 'dependencies.gradle'
}

3、 然后就可以在module下直接调用这个方法啦:

dependencies {
    rootProject.allModuleDependencies(dependencies)
}

还可以吧。

另外说明,DependencyHandler这个类的路径:

windows直接ctrl+鼠标左键直接能跳转查看

有空可以看看gradle源码哦

转载于:https://my.oschina.net/ccmagic/blog/3037094

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值