Смутно с использованием назначения "=" и скобок {}
Я новичок в gradle (и так далее к groovy), и я едва ли очучу какую-то концепцию и не знаю, связано ли это groovy или gradle и какие ключевые слова для google, для получения некоторой помощи.
Я очень часто натыкаюсь на вещи вроде:
android {
[some configuration]
}
Итак, что такое Android? Класс? Пространство имен? Коллекция свойств?
Но что более запутанно:
Иногда я вижу конфигурации, которые выглядят так:
minSdkVersion 19
Кажется, это задание, но без знака равенства.
И иногда есть задания с равными знаками, такими как
source = "folder/file.java"
Так что это очень запутанно. Равный знак против равного знака. Все эти скобки.
Все введенные мной groovy представления не охватывают именно эти темы.
Так что это какое-то соглашение gradle или это реальный синтаксис groovy?
Ответы
Ответ 1
В Groovy скобки иногда необязательны.
Первый android
передает замыкание методу. то есть:
void android( Closure config ) {
println "In Android : ${config()}"
}
android {
'tim'
}
prints: In Android : tim
это то же самое, что и вызов:
android( {
'tim'
} )
Если вы положите парсеры назад.
Второй пример с minSdkVersion
одинаков, но он передает Integer методу.
void minSdkVersion( Integer version ) {
println "In MinSdkVersion : $version"
}
minSdkVersion 19
// same as minSdkVersion( 19 )
Итак, чтобы напечатать In MinSdkVersion : 19
В последнем примере устанавливается свойство String (как и следовало ожидать)
Ответ 2
Строго говоря, android
- это динамический метод, который принимает замыкание (кодовый блок), которому предоставляется доступ к некоторому внутреннему представлению конфигурации android
plugin/task. Таким образом, внутри этого закрытия вы в конечном итоге либо вызываете другие методы, либо присваиваете доступным свойствам. Если знак равенства отсутствует, то это вызов метода, если он тогда является чистым свойством. Вы можете получить эту идею, посмотрев документацию плагина или на объекты, которые ее представляют.
Я думаю, вы можете смело ссылаться на этот блок как на конфигурацию плагинов для Android. Так как это влияет на код.