ext定义变量
主要是利用 gradle 的 ext 关键字来实现。
ext 定义在不同的位置,后续使用的方式及作用的范围不一样。
- 在 root/build.gradle的 buildscript {} 中定义
ext {
va = 'aaa'
vb = 'bbb'
}
或
ext.va = 'aaa'
ext.vb = 'bbb'
如上,定义了两个全局变量。其它 gradle 文件中,直接使用 va
、vb
, 或"$va"
、"$vb"
即可。
-
在 root >build.gradle 的 allprojects 或 该 gradle 中与 buildscript 平级的其它位置 ; 也是一种全局的变量。
调用时需要rootProject.ext.va
或"$rootProject.ext.va"
-
在一般的 gardle 中定义的 只在当前 域中有效。非全局的
全局版本管理
将依赖库的各种版本配置在, 统一的位置, 即 上述的 全局 ext 中。或自行增加一个 gradle 文件来设定配置。 然后通过 apply from:"config.gradle’ 在适当的位置引入。 如前文所说的两种 全局变量的位置处 引入,后续使用 也要注意。
如定义在 root/buildscript 中
ext {
refs = [
junit : "junit:junit:4.12"
]
}
//再来个这样的
ext.refs.testRunner = "com.android.support.test:runner:1.0.2"
上面定义的 refs 是一个 map。可以 ext.refs=[:]
定义一个空 map,后续再使用。
使用::
implementation refs.junit
implementation refs.testRunner
好处
统一管理。
找哪个库的 group 或 name 或 version,去一个地方找就行。
坏处
无法由 AS 智能提示 版本过期信息。 AS3.4也无法在 project structure 中,看到相关的依赖库设置,更别说更新了。
要破解这个事, 是不是还要写一个 原始依赖的 gradle 文件, 然后 在想要看看哪些库要更新时,在 settings.gradle 中使用这个 gradle 文件进行编译:project(":app").buildFileName = 'app_origin.gradle'
打包失败
今天遇到,AS3.4中,由于在 productFlavors 中的 某个 flavor 中 配置了{ minsdkVersion configs.minsdkVersion}
,使用命令和 AS 打包,都报错,打包任务无法进行。