Gradle Kotlin DSL

Как понятно из названия, 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 более информативны и есть подсветка типов в лямбдах. Посмотреть интересно, но нет. Когда-нибудь потом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *