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. Приклад нижче демонструє налаштування застосунку з двома варіантами.

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-модуля включає налаштування цільових платформ та 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 або управління версіями. Завдяки статичній типізації такі функції можна викликати з перевіркою параметрів на етапі компіляції, що виключає помилки в 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")
            }
        }
    }
}

// Використання в build.gradle.kts
configureSigning()

Міграція з Groovy на KTS

Міграція з Groovy на KTS — процес, який можна виконувати поступово. Gradle підтримує змішані проєкти, де частина модулів використовує Groovy (build.gradle), а частина — KTS (build.gradle.kts). settings.gradle та кореневий 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 надає розширення для конфігурації цільових платформ, 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 для варіантів.
  • Kotlin Multiplatform вимагає KTS — Groovy не підтримує мультиплатформену конфігурацію коректно.
  • Міграція з Groovy на KTS може бути поетапною завдяки підтримці змішаних проєктів.
  • Продуктивність збірки на KTS ідентична Groovy після початкової компіляції скриптів.
  • Використовуйте KTS для всіх нових проєктів, особливо для KMM та Android з AGP 7.0+.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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