Gradle KTS — что это, Kotlin DSL для Gradle и синтаксис

Автор: IT Sectr Опубликовано: 2026-06-05 Время чтения: 8 мин

Gradle KTS — это Kotlin DSL для системы сборки Gradle, который позволяет писать build-скрипты на языке Kotlin вместо Groovy. Файлы с расширением .gradle.kts поддерживают статическую типизацию, автодополнение в IntelliJ IDEA и Android Studio, а также прямой доступ к API Gradle через Kotlin-синтаксис. Google рекомендует KTS для Android-проектов начиная с AGP 7.0, а Kotlin Multiplatform использует KTS как стандартный формат конфигурации. По данным Gradle, 2025, более 60% новых проектов выбирают KTS вместо Groovy для написания build-скриптов.

Главное

  • Gradle KTS — Kotlin DSL для build-скриптов Gradle с расширением .gradle.kts.
  • Статическая типизация — проверка конфигурации на этапе компиляции, а не в runtime.
  • IDE-поддержка — автодополнение, навигация и рефакторинг в IntelliJ IDEA и Android Studio.
  • Google-рекомендация — KTS рекомендован для Android-проектов начиная с AGP 7.0.
  • Миграция — переход с Groovy на KTS может быть выполнен постепенно для каждого модуля.

Что такое Gradle KTS?

Gradle KTS — это Kotlin DSL (Domain Specific Language), предоставляющий альтернативу Groovy для написания конфигурационных файлов Gradle. Вместо синтаксиса Groovy разработчики используют Kotlin — строго типизированный язык, который проверяет корректность конфигурации на этапе компиляции. KTS был впервые представлен в Gradle 5.0 в 2018 году как экспериментальная функция и достиг стабильности в Gradle 6.0.

Основная цель KTS — устранить недостатки Groovy в build-скриптах. Groovy — динамически типизированный язык, в котором ошибки конфигурации проявляются только в runtime при выполнении задачи. KTS позволяет обнаружить те же ошибки на этапе редактирования кода благодаря статической типизации Kotlin. Дополнительно KTS предоставляет доступ к API Gradle с полной документацией типов, что значительно упрощает изучение и использование сложных конфигурационных блоков.

Экосистема KTS поддерживается всеми основными инструментами: Android Studio, IntelliJ IDEA, VS Code с Kotlin-плагином и Gradle Build Tool. Все современные плагины (Android Gradle Plugin, Kotlin Multiplatform, Protobuf, Compose) предоставляют Kotlin-дружественный API с явными типами, что делает KTS предпочтительным выбором для новых проектов.

Как работает Gradle KTS

Gradle KTS использует Kotlin-компилятор для обработки файлов .gradle.kts. Gradle распознаёт расширение и передаёт скрипты на обработку Kotlin-скриптовому движку, который компилирует их в классы. Эти классы затем выполняются Gradle для построения модели проекта. Ключевое отличие от Groovy: KTS-скрипты компилируются заранее, а не интерпретируются динамически, что позволяет выявлять ошибки до начала выполнения задач.

Архитектура KTS основана на kotlin-scripting. Каждый .gradle.kts файл — это Kotlin-скрипт с неявными импортами API Gradle. Разработчик может использовать любые конструкции Kotlin: extension-функции, лямбды, data-классы и даже объявлять вспомогательные функции внутри build-скрипта. Gradle предоставляет набор extension-функций для типизированной конфигурации блоков: dependencies, android, kotlin и других.

kotlin
plugins {
    id("com.android.application") version "8.4.0"
    kotlin("android") version "2.0.21"
}

android {
    namespace = "com.itsectr.app"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.itsectr.app"
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0.0"
    }
}

dependencies {
    implementation(platform("androidx.compose:compose-bom:2024.06.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.core:core-ktx:1.13.1")
}

Преобразование типов в KTS

Одно из ключевых отличий KTS от Groovy — работа с типами. В Groovy все конфигурации принимают Object, в KTS — конкретные типы Kotlin. Например, compileSdk принимает Int, а не строку. Это исключает ошибки, связанные с неверным типом: в Groovy compileSdk 34 и compileSdk "34" работают одинаково, в KTS только первый вариант. Такая строгость делает конфигурацию более предсказуемой и документированной.

Gradle KTS vs Groovy: сравнение

Groovy был оригинальным DSL для Gradle и остаётся полностью поддерживаемым. Однако KTS предлагает ряд преимуществ, которые делают его рекомендованным для новых проектов. Статическая типизация, лучшая производительность редактирования в IDE и более строгий синтаксис — основные причины перехода на KTS. При этом Groovy сохраняет преимущество в лаконичности для простых конфигураций.

Производительность сборки на KTS и Groovy практически идентична после компиляции скриптов. KTS-скрипты компилируются дольше при первом запуске или после очистки кэша, но последующие сборки работают с той же скоростью, что и Groovy-скрипты. Gradle кэширует скомпилированные KTS-скрипты в build-директории, поэтому повторная компиляция происходит только при изменении скрипта.

ХарактеристикаGradle KTSGroovy DSL
ТипизацияСтатическая, проверяется при компиляцииДинамическая, проверяется в runtime
IDE-поддержкаАвтодополнение + навигация + рефакторингОграниченная (динамическая типизация)
Синтаксис блоковЛямбды с receiver (типизированные)Closure (нетипизированный)
Назначение свойствЧерез = (compileSdk = 34)Без знака = (compileSdk 34)
Первая компиляцияМедленнее (компиляция Kotlin)Быстрее (интерпретация)
Последующие сборкиОдинаково (кэш скриптов)Одинаково

Выбор между KTS и Groovy в 2026 году очевиден: для новых проектов — KTS. Google, JetBrains и Gradle рекомендуют KTS для всех новых проектов. Groovy остаётся актуальным для поддержки легаси-проектов, где миграция нецелесообразна из-за объёма конфигураций или специфических плагинов, несовместимых с KTS.

Примеры кода: build-скрипты на KTS

Рассмотрим типичные конфигурационные блоки в KTS для Android, Kotlin Multiplatform и Compose Multiplatform. Android-проект с KTS требует явного указания типов в конфигурации buildTypes и productFlavors. Пример ниже демонстрирует настройку приложения с двумя flavour'ами.

kotlin
android {
    buildTypes {
        val release = getByName("release") {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        getByName("debug") {
            applicationIdSuffix = ".debug"
        }
    }

    flavorDimensions += "version"
    productFlavors {
        register("demo") {
            dimension = "version"
            versionNameSuffix = "-demo"
        }
        register("full") {
            dimension = "version"
        }
    }
}

Для Kotlin Multiplatform KTS обязателен — Groovy не поддерживает конфигурацию мультиплатформенных модулей корректно. Конфигурация KMM-модуля включает настройку target-платформ и source set'ов. Пример ниже показывает конфигурацию shared-модуля с iOS и Android.

kotlin
kotlin {
    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "17"
            }
        }
    }

    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "Shared"
            isStatic = true
        }
    }

    sourceSets {
        commonMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
        }
        androidMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
        }
    }
}

Вспомогательные функции и кастомные таски

KTS позволяет объявлять вспомогательные Kotlin-функции внутри build-скрипта. Это особенно удобно для повторяющихся конфигураций, таких как signing configs или version management. Благодаря статической типизации такие функции можно вызывать с проверкой параметров на этапе компиляции, что исключает ошибки в signing-конфигурациях перед публикацией в Google Play.

kotlin
fun Project.configureSigning() {
    android {
        signingConfigs {
            register("release") {
                storeFile = file("release.keystore")
                storePassword = System.getenv("KEYSTORE_PASSWORD")
                keyAlias = System.getenv("KEY_ALIAS")
                keyPassword = System.getenv("KEY_PASSWORD")
            }
        }
    }
}

// Usage in build.gradle.kts
configureSigning()

Миграция с Groovy на KTS

Миграция с Groovy на KTS — процесс, который можно выполнять постепенно. Gradle поддерживает смешанные проекты, где часть модулей использует Groovy (build.gradle), а часть — KTS (build.gradle.kts). settings.gradle и root build.gradle могут быть переведены первыми, так как они не зависят от плагинов модулей. Google рекомендует начинать миграцию с settings.gradle.kts, затем корневой build.gradle.kts, и только потом модули.

Основные шаги миграции включают: замену синтаксиса closures на лямбды, добавление знаков = для присваивания, замену строковых ключей на типизированные константы и явную типизацию переменных. Android Studio предоставляет автоматическую конвертацию Groovy → KTS для простых блоков, но сложные конфигурации с вложенными closures требуют ручного переписывания.

Groovy (было)KTS (стало)
compileSdk 34compileSdk = 34
buildTypes { release { ... } }buildTypes { getByName("release") { ... } }
implementation 'com.android.x:y:1.0'implementation("com.android.x:y:1.0")
flavorDimensions "version"flavorDimensions += "version"
productFlavors { demo { ... } }productFlavors { register("demo") { ... } }
def vsn = "1.0"val vsn = "1.0"

Типичные проблемы при миграции включают неявные вызовы методов Groovy, которые не имеют Kotlin-эквивалента, и плагины, которые не предоставляют Kotlin-дружественный API. Для решения первой проблемы Gradle предоставляет совместимость через withGroovyBuilder — механизм, который позволяет вызывать Groovy-методы из KTS. Для второй — необходимо дождаться обновления плагина или использовать его в Groovy-модуле до полной миграции.

Gradle KTS для Kotlin Multiplatform

Kotlin Multiplatform — основной проект, в котором KTS является обязательным требованием. Плагин kotlin multiplatform предоставляет расширения для конфигурации target-платформ, source set'ов и framework-бинарников, которые доступны только через Kotlin DSL. Groovy не поддерживает мультиплатформенную конфигурацию корректно, поэтому KMM-проекты используют исключительно KTS.

Конфигурация KMM в KTS включает нестандартные блоки: kotlin.target для указания платформ, kotlin.sourceSets для организации общего и платформенного кода, kotlin.cocoapods для интеграции с CocoaPods и kotlin.jvmToolchain для выбора JDK. Каждый блок имеет строго типизированный API с автодополнением в Android Studio, что особенно ценно для сложной конфигурации KMM-проекта с несколькими платформами.

kotlin
kotlin {
    iosArm64()
    iosSimulatorArm64()
    iosX64()

    cocoapods {
        summary = "Shared Kotlin module"
        homepage = "https://itsectr.com"
        framework {
            baseName = "Shared"
            isStatic = false
        }
        pod("Alamofire") {
            version = "5.9"
        }
    }
}

Благодаря статической типизации KTS разработчики KMM получают автодополнение для source set'ов и зависимостей, проверку типов framework-конфигурации и возможность рефакторинга платформенных имён. KTS также упрощает отладку: ошибки в KMM-конфигурации отображаются как ошибки компиляции Kotlin с понятными сообщениями, в отличие от Groovy, где ошибки могли быть скрыты до выполнения Gradle-задачи.

Часто задаваемые вопросы

Обязательно ли переходить с Groovy на KTS?

Обязательно для Kotlin Multiplatform проектов. Для Android и серверных проектов Groovy остаётся поддерживаемым, но Google и Gradle рекомендуют KTS для новых проектов из-за статической типизации и лучшей IDE-поддержки.

Можно ли использовать Groovy и KTS в одном проекте?

Да, Gradle поддерживает смешанные проекты. Каждый модуль может использовать свой DSL. settings.gradle или settings.gradle.kts определяют корневой DSL, но модули независимы. Это позволяет мигрировать постепенно.

Почему KTS компилируется дольше Groovy?

KTS требует компиляции Kotlin в байт-код перед выполнением. Это занимает дополнительное время при первом запуске или после очистки кэша. Все последующие сборки используют кэшированные классы со скоростью, сопоставимой с Groovy.

Какие плагины не совместимы с KTS?

Большинство современных плагинов совместимы. Проблемы возникают с устаревшими плагинами, которые используют Groovy-специфичный API или Closure без Kotlin-аналога. Для таких плагинов используйте withGroovyBuilder() или оставьте модуль на Groovy.

Как KTS влияет на производительность сборки?

После первоначальной компиляции скриптов производительность сборки идентична Groovy. Gradle кэширует скомпилированные KTS-скрипты, и повторная компиляция происходит только при их изменении. Разница в скорости сборки модулей незаметна.

Итоги

  • Gradle KTS — Kotlin DSL для build-скриптов Gradle, обеспечивающий статическую типизацию и автодополнение в IDE.
  • Статическая типизация позволяет обнаруживать ошибки конфигурации на этапе компиляции, а не при выполнении задач.
  • Синтаксис KTS отличается от Groovy: обязательный знак =, функция getByName, register для flavour'ов.
  • Kotlin Multiplatform требует KTS — Groovy не поддерживает мультиплатформенную конфигурацию корректно.
  • Миграция с Groovy на KTS может быть поэтапной благодаря поддержке смешанных проектов.
  • Производительность сборки на KTS идентична Groovy после первоначальной компиляции скриптов.
  • Используйте KTS для всех новых проектов, особенно для KMM и Android с AGP 7.0+.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также