文档章节

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

ccMagic
 ccMagic
发布于 04/15 16:19
字数 648
阅读 38
收藏 1

原创内容,转载请注明出处 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源码哦

© 著作权归作者所有

ccMagic
粉丝 0
博文 14
码字总数 4484
作品 0
合肥
程序员
私信 提问
从零开始搭建Android组件化框架

问题 在已经开发过几个项目的童鞋,如果这时需要重新开发一个新项目,是否需要自己重新搭建框架呢,还是从老项目中拷贝粘贴? 我们是否可以封装一个底层的lib库,这个底层的公共基础库 包括了一些...

tome869535144
2018/06/06
0
0
美团外卖Android平台化的复用实践

美团外卖平台化复用主要是指多端代码复用,正如美团外卖iOS多端复用的推动、支撑与思考文章所述,多端包含有两层意思:其一是相同业务的多入口,指美团外卖业务需要在美团外卖App(下文简称外...

美团技术团队
2018/09/21
222
0
通过Gradle自动实现Android组件化模块构建

原文博客地址:Tangpj 不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。 —— 村上春树 背景...

Tangpj
2018/07/24
0
0
MVPArms官方快速组件化方案开源,来自5K star的信赖

原文地址: https://www.jianshu.com/p/f671dd76868f 0 前言 1 简介 2 组件化方案描述 3 项目讲解 0 前言 MVPArms 从两年前开源至今, 已经累积了 5k star, 获得了上千个商业项目的信赖和认可 ...

JessYan
2018/05/06
0
0
有关Android插件化的一些总结思考

最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限...

技术小能手
2018/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

for循环

九九乘法表 示例:for(int i = 1; i <= 9; i++){ for (int j = 1; j <= i; j++) { // 每次开始i循环,j都会重新定义为j=1,然后开始循环计算 System.out.print(j +......

Shutting
22分钟前
7
0
小王子1

一定要帅! 韩国设计师品牌 insgram全世界得网红 韩国潮男穿搭 HM 找到穿衣服最好看的人,跟他比,比他好看。 在兴趣前,不要表现目的性,压力 关系是不热就冷的! 不喜欢压力,不喜欢负责任...

阿锋zxf
41分钟前
10
0
时间戳

1 loadTimeString(ts) { var d = new Date(); if (String(ts).length == 10) { d = new Date(ts * 1000); ......

东方巨人
42分钟前
7
0
Redis Cluster

Redis Cluster 集群 redis集群有以下几种方式 普通一主多从 普通一主多从+哨兵 cluster分片模式 一主多从 搭建方式网上很多,就不多描述了。 这种集群方式,一般master用作写,slave用做读,...

lazy~
43分钟前
13
0
 介绍一款优秀的通用管理权限快速开发框架

这是一套以权限管理为主的轻量化快速开发框架,配置有流程、专业表单、权限、app、企业微信等基础功能模块,在开发通用软件的效率上很有优势。 软件平台常用研发需求分析 《那些年我们一起做...

我想造火箭
59分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部