在看下面代码时,首先你要对
gradle的默认的项目结构和属性传递有一定了解。
1. 扩展属性
使用 ext 命名空间
- 定义
project.ext.myProp = 'myValue'
ext {
someOtherProp = 123
}
- 使用
project.someOtherProp
2. 属性文件
Gradle 属性可以通过在gradle.properties 文件中声明直接添加到项目中。
# gradle.properties
exampleProp = myValue
someOtherProp = 455
其中扩展属性只能在rootProject 中被定义,并且subProject 会被传递。在subProject中定义无效(所以不会有覆盖的情况)。
项目结构
rootProject {
:app
:library
}
定义扩展属性
rootProject.ext.prop = 123
结果
/*
app.prop : 123 //传递
library.prop : 123 //传递
*/
在 rootProject 中定义的扩展属性会在:app 和 :library 中都有效。
属性文件,可以在rootProject中定义,也可以在subProject 中定义。
项目结构
rootProject {
:app
:library
}
定义扩展属性
rootProject#gradle.properties {
prop = rootProject
}
app#gradle.properties {
prop = app
}
结果
/*
app.prop : app // 覆盖
library.prop : rootProject //传递
*/
如何将一个.gralde文件的函数给其他文件使用
// 定义在 `test.gradle`
def sayHello() {
println("sayHello")
}
ext {
sayHello = this.&sayHello
}
// 使用在 `build.gradle`
apply from: './test.gradle'
// 我想在这里调用 test.gradle 文件中的 sayHello() 函数
sayHello()