在看下面代码时,首先你要对
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()