Gradle иногда может быть довольно запутанным, особенно для разработчиков Android, работающих над небольшими и средними проектами. В Android-проектах Gradle установлен по умолчанию, и мы редко чувствуем необходимость изучать, как и почему все работает.
Вот несколько вопросов и ответов, которые могли возникнуть у вас в связи с Gradle.
1. Почему мы используем gradlew taskName
вместо gradle taskName
для выполнения задачи?
Потому что в наших проектах мы используем Gradle wrapper, чтобы иметь одну версию Gradle для всех разработчиков проекта.
2. Модули Android Studio и проекты Gradle
Проект Android также является проектом Gradle. Gradle имеет отношения 1 к 1 между своими проектами и файлами build.gralde
. То же, что в Android studio называется «модулем», в Gradle называется подпроектом.
3. Следует ли использовать '
или "
для строковых литералов?
Groovy, который является одним из языков, используемых наряду с Kotlin для описания скрипта Gradle, распознает как двойные, так и одинарные кавычки в качестве строки.
Типы строк в Groovy:
- ‘Hello World 1’ — String
- «Hello World 2» — строка
- «Hello World $count» — GString
4. Вызовы функций, свойства и когда использовать круглые скобки?
В Groovy:
- Если функция имеет хотя бы один параметр, можно игнорировать фигурные скобки.Поля являются свойствами, поэтому каждое поле класса генерирует setter и getter для объявленного поля.
Посмотрите на приведенный ниже код и попробуйте угадать, сколько раз будет вызвана функция Foo.name()
при выполнении ./gradlew showMagic
?
class Foo {
def name = ""
void name(String newString) {
name = newString
println("Foo.name() triggered")
}
}
tasks.create("showMagic") {
doFirst {
group "Whole new group"
description "Check setter and getter capabilities"
def foo = new Foo()
foo.name = "string 1"
println("showMagic() ${foo.name}")
foo.name("string 2")
println("showMagic() ${foo.name}")
foo.name "string 3"
println("showMagic() ${foo.name}")
foo.setName("string 4")
println("showMagic() ${foo.name}")
foo.setName "string 5"
println("showMagic() ${foo.name}")
String propertyOrFunctionName = "name"
foo."$propertyOrFunctionName" = "string 6"
println("showMagic() ${foo.name}")
}
}
Выход:
showMagic() string 1
Foo.name() triggered
showMagic() string 2
Foo.name() triggered
showMagic() string 3
showMagic() string 4
showMagic() string 5
showMagic() string 6
5. Функции с несколькими параметрами
Как вы могли догадаться из приведенного выше кода, мы можем игнорировать круглые скобки и передавать несколько параметров, разделенных запятыми:
void foo(String url, String parameter) {
println url
println parameter
}
tasks.create("callFoo") {
doFirst {
foo "google.com", 'consistency'
}
}