Android gradle配置全局变量,管理全局类库版本的好处与坏处


ext定义变量

主要是利用 gradle 的 ext 关键字来实现。
ext 定义在不同的位置,后续使用的方式及作用的范围不一样。

  1. 在 root/build.gradle的 buildscript {} 中定义
ext {  
	va = 'aaa'
	vb = 'bbb'  
}
或
ext.va = 'aaa'
ext.vb = 'bbb'

如上,定义了两个全局变量。其它 gradle 文件中,直接使用 vavb, 或"$va""$vb" 即可。

  1. 在 root >build.gradle 的 allprojects 或 该 gradle 中与 buildscript 平级的其它位置 ; 也是一种全局的变量。
    调用时需要 rootProject.ext.va"$rootProject.ext.va"

  2. 在一般的 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 打包,都报错,打包任务无法进行。


发布了400 篇原创文章 · 获赞 364 · 访问量 162万+

猜你喜欢

转载自blog.csdn.net/jjwwmlp456/article/details/89973590