1. 引言
上面的代码中出现了3种定义并使用变量的方法,分别是def | ${System.env.xxx} | rootProject.ext.xxx
。
2. def
def
关键字的方式很好理解,def
是Groovy
语言中定义变量的关键字。
Groovy
中的变量可以通过两种方式定义 - 使用数据类型的本地语法,或者使用def
关键字。 对于变量定义,必须明确提供类型名称或在替换中使用def
。
3. gradle.properties
${System.env.xx}
是指在在根目录下的gradle.properties
文件里去添加参数。
在一些项目中会分拆app
和 lib
模块 , 这时候引用公共配置的时候,一旦更改版本会出现需要同步更改两个地方的问题。这种情况,可以通过配置gradle.properties
实现替换。
需要注意的是:gradle.properties
定义的属性,在使用时拿到的默认是String
类型的,所以有些地方需要自己进行类型转换。
4. ext
根据ext
属性的官方文档,ext
属性是ExtensionAware
类型的一个特殊的属性,本质是一个Map
类型的变量。
可以在根目录下的build.gradle
中定义ext属性。
buildscript {
// ...
}
ext {
gsonVersion = '2.8.7'
}
allprojects {
// ...
}
复制代码
形如 rootProject.ext.xx
命名的变量,只需要挂载到 ext
下面是可以在gradle
文件中通过变量名 xx 直接引用的。每一个模块都可以有自己的 ext
变量,rootProject.ext
强调了引用自根目录。
因此rootProject.ext
不是必需的,如果模块配置的gradle
文件中没有定义同名变量,那么rootProject.ext
则可以省略,即可以直接引用gsonVersion
变量。
implementation "com.google.code.gson:gson:$gsonVersion"
复制代码
但是如果模块的配置文件定义了相同的变量,直接引用gsonVersion
则会优先使用模块里的变量,这个道理与全局变量、局部变量类似。
5. 注意事项
implementation "com.google.code.gson:gson:$gsonVersion"
复制代码
使用如上方法定义依赖时,需要使用双引号,因为gradle
使用的是groovy
语言, groovy
的字符串有三种使用方式,单引号''
,双引号""
,三个单引号'''
,分别表示:只表示字符串;字符串可以通过${}
引用其他变量;字符串换行。