Gradle 使用技巧(六) - 使用统一的Gradle管理

1. 前言

大多数情况下我们依赖第三方库都是直接在dependencies中直接引用,在引入少量且不是多个地方引用是没有问题的,但是一旦某一个开源库在多个地方引用,且每个地方引用的版本都不一致的时候,就只在是难以维护了。
在前面讲过,Gradle是Groovy语言编写的,既然是语言,那么我们可以不可以像Java那样将引入配置抽取成为一个常量配置呢?答案是肯定的,要不然这篇文章也没有继续写下去的必要。


img_6fe42b43370195b994eeb5ac755da1f2.png
感觉到气气

2. 统一依赖配置

2.1. 创建配置Gradle

在项目的根目录,也就是setting.gradle的同级创建一个【config.gradle】的文件,这个文件就是我们用来做相关配置的文件了。

img_9d60ac236f0e4c24a70a280edf9c0359.png
创建config.gradle

2.2. 引入配置Gradle

配置文件创建成功,需要在根目录的build.gradle中进行引用,这一步就像我们的导包。

apply from: "config.gradle"

如图:

img_28e18e4b1dcad22c813adb3697af0a50.png
引入config.gradle

2.3. 配置Gradle说明

配置文件引入完毕,我们就可以进行相关依赖的配置了,原理是用了project中ExtraPropertiesExtension的ext属性来完成的,ext接收一个闭包,闭包内可以写任意属性,相当于增加了一个拓展属性,在需要的地方直接调用【rootProject.ext.属性名】就可以直接调用。

img_1e179df262b54ecf1c399082057f60bd.png
ext说明

2.4. 编写ext内容

先编写基础的内容:

ext {
    // 创建一个 dependencies集合,存储的内容为 "key" : "value"
    dependencies = []
}
img_b785c94c4e5afb372cf64d1aa8253df5.png
image

先看看原始dependencies,为了方便,这里就只加了一个v7包

img_bd111b0e2f3181bd4cd9070c8ad21337.png
原始依赖

我们将v7包的引入迁移到config.gradle,dependencies中存储的数据是key/value形式的,就是Java中的map集合。

ext {
    // 创建一个 dependencies集合,存储的内容为 "key" : "value"
    dependencies = ["appcompat-v7": "com.android.support:appcompat-v7:26.1.0"]
}

然后再core-library/build.gradle进行引用:

dependencies {
    // 从config.gradle中引用
    implementation rootProject.ext.dependencies["appcompat-v7"]
}

如图:

img_e3d866d0cfc5673ed957a7ee6bdc197f.png
build.gradle中进行引用

至此,简单的抽取配置就完成了,是不是文章到此结束?当然不是,我们需要有散发精神,我们的gradle中不是有compileSdkVersion等等之类的吗?其实我们也可以将他们抽取出来,做统一的管理。

2.5. 抽取其他属性

看下图,我们的目标是将图中的这些属性抽取到config.gradle中去。

img_0ba9d8a330e407269539ce5a458b942b.png
未抽取的属性

我们在config.gradle中再创建一个android集合,用来存放变量,然后将变量存储进去:

ext {
    android = [compileSdkVersion       : 26,
               minSdkVersion           : 18,
               targetSdkVersion        : 26,
               versionCode             : 1,
               versionName             : "1.0"
    ]
    // 创建一个 dependencies集合,存储的内容为 "key" : "value"
    dependencies = ["appcompat-v7": "com.android.support:appcompat-v7:26.1.0"]
}

然后再build.gradle中进行替换引用:

android {
    compileSdkVersion rootProject.ext.android["compileSdkVersion"]
    defaultConfig {
        minSdkVersion rootProject.ext.android["minSdkVersion"]
        targetSdkVersion rootProject.ext.android["targetSdkVersion"]
        versionCode rootProject.ext.android["versionCode"]
        versionName rootProject.ext.android["versionName"]
    }
}

在进行一下对比:

img_5283ddf3d99525590279239afd55204f.png
抽取后

这样的话,以后不管有多少个module,都能够进行统一的版本,sdk的配置。

2.6. 拓展

其实我们的signingConfig也是可以抽取出来统一配置,都是依葫芦画瓢,就不再累述了。

3. 最后

未完待续、敬请期待!
免为其难的关注一下公众号吧!!

img_f0790f8ed7e67ea3b5a4d6bc3f65b0aa.png
生活实在是太苦啦
img_b246dc41a34e6fdd3598d113e0f65194.jpe
FullScreenDeveloper
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/641046

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。