Как понятно из названия, Gradle Kotlin DSL — это возможность писать Gradle скрипты на Kotlin. Давайте без лишних слов попробуем. Возьмём базовый проект для Android и переведём его на Kotlin DSL. Сначала нужно обновить версию Gradle до последней. На данный момент последняя версия — 4.10.2 с поддержкой Kotlin DSL 1.0RC6. Для обновления в файле gradle-wrapper.properties нужно изменить версию:и синхронизировать проект.
Теперь нужно перевести режим отображение структуры файлов на Project, так как в режиме Android файлы будут пропадать после переименования:
Изменить нужно три файла — settings.gradle и build.gradle уровня проекта и build.gradle уровня модуля app. К именам этих файлов нужно дописать .kts, чтобы получилось settings.gradle.kts/build.gradle.kts.
Содержимое файла settings.gradle меняется с
include ':app'
на
rootProject.buildFileName = "build.gradle.kts" include(":app")
Обновляем build.gradle.kts уровня проекта.
Было
Стало
Почти всё так же, но зависимости(dependencies) устанавливаются немного по-другому и отличается создание таска.
И файл уровня модуля app.
Было
Стало
Отличаются зависимости, как и в файле уровня проекта и регистрация плагинов. Блок android тоже немного отличается. В синтаксисе котлина параметры, которые объявлены как методы задаются через вызов метода, например minSdkVersion(21), а те, которые представляют собой сеттеры — через приравнивание(=). Например versionCode = 1, так как сигнатура этого метода в Java(в классе DefaultProductFlavor) такая:
public ProductFlavor setVersionCode(Integer versionCode)
Это смотрится, на мой взгляд, так себе, чисто эстетически хочется единообразия. Хоть и можно задавать все параметры через методы, но IDE будет ругаться и предлагать использовать property access syntax, хотя и это можно решить с помощью аннотации @Suppress(«UsePropertyAccessSyntax»).
Ещё один пример немного посложней — project, app.
Стоит ли переходить сейчас?
В целом не всё очевидно, а документации и сложных примеров мало. Некоторые конструкции более громоздкие, чем в Groovy. IDE не показывает, какому модулю какой файл принадлежит и теряет файл settings.gradle.kts, наверняка это скоро исправят. Но мне нравится, что подсказки в IDE более информативны и есть подсветка типов в лямбдах. Посмотреть интересно, но нет. Когда-нибудь потом.