我是gradle的新手(也是groovy),我很难落后于某些概念,并且不知道它是否与groovy或gradle相关以及谷歌有哪些关键词,以获得一些帮助。
我经常偶然发现像:
这样的东西android {
[some configuration]
}
那么什么是android?一类?命名空间?属性集合?
但更令人困惑的是:
有时我看到的配置如下:
minSdkVersion 19
这似乎是一项任务,但没有一个等号。 有时会有像
这样的等号的作业source = "folder/file.java"
所以这很令人困惑。等号与没有等号。所有这些支架的东西。
我看到的所有常规介绍都没有涵盖这些主题。 那么它是一些gradle约定还是真正的groovy语法?
答案 0 :(得分:16)
在Groovy中,括号有时是可选的。
第一个android
正在将闭包传递给Method。即:
void android( Closure config ) {
println "In Android : ${config()}"
}
android {
'tim'
}
打印:In Android : tim
它与调用相同:
android( {
'tim'
} )
如果你把parens放回去。
minSdkVersion
的第二个示例是相同的,但它将Integer传递给方法。
void minSdkVersion( Integer version ) {
println "In MinSdkVersion : $version"
}
minSdkVersion 19
// same as minSdkVersion( 19 )
这样就可以打印In MinSdkVersion : 19
最后一个示例是将属性设置为String(正如您所期望的那样)
答案 1 :(得分:5)
严格来说android
是一个接受闭包(代码块)的动态方法,可以访问android
插件/任务配置的某些内部表示。因此,在该闭包内,您最终要么调用其他方法,要么对可用的属性进行赋值。如果没有等号,那么它是一个方法调用,如果存在那么它是一个纯属性。您可以通过查看插件文档或代表它的对象来了解这个想法。
我认为你可以安全地将这个块称为android插件配置。因为它是代码所影响的。
答案 2 :(得分:1)
在gradle中,您有一些插件,每个插件都包括扩展的属性和方法。
属性是常规属性,其获取器/设置器是auto-generated。当您要更改属性时,幕后发生的事情就是调用它的生成的setter。因此,基本上,这是一个方法调用。
方法调用可以通过多种方式完成(只是语法糖)。例如,您可以省略the paranthesis or commas。我认为该链接应该可以说明您提到的外观。
这些方法和属性的解析方式完全不同。如果您对这些词的来源感兴趣,请检查代表。