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 (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 користи Kotlin компајлер за обраду .gradle.kts датотека. Gradle препознаје екстензију и прослеђује скрипте Kotlin скрипт мотору, који их компилира у класе. Ове класе затим Gradle извршава за изградњу модела пројекта. Кључна разлика у односу на Groovy: KTS скрипте се компилирају унапред, а не интерпретирају динамички, што омогућава откривање грешака пре почетка извршавања задатака.
Архитектура KTS-а заснована је на kotlin-scripting-у. Свака .gradle.kts датотека је Kotlin скрипта са имплицитним импортима Gradle API-ја. Програмер може користити било које Kotlin конструкције: extension функције, ламбде, data класе, па чак и декларисати помоћне функције унутар build-скрипте. Gradle пружа скуп extension функција за типизирану конфигурацију блокова: dependencies, android, 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-а и Groovy-ја је рад са типовима. У Groovy-ју све конфигурације примају Object, у KTS-у — конкретне Kotlin типове. На пример, compileSdk прима Int, а не стринг. Ово искључује грешке везане за неисправан тип: у Groovy-ју compileSdk 34 и compileSdk „34” раде исто, у KTS-у само прва варијанта. Оваква строгост чини конфигурацију предвидљивијом и документованијом.
Groovy је био оригинални DSL за Gradle и остаје потпуно подржан. Међутим, KTS нуди низ предности које га чине препорученим за нове пројекте. Статичко типизирање, боље перформансе уређивања у IDE-у и строжа синтакса — главни разлози за прелазак на KTS. Притом, Groovy задржава предност у концизности за једноставне конфигурације.
Перформансе изградње на KTS-у и Groovy-ју су практично идентичне након компилације скрипти. KTS скрипте се компилирају дуже при првом покретању или након чишћења кеша, али наредне изградње раде истом брзином као Groovy скрипте. Gradle кешира компилиране KTS скрипте у build директоријуму, па се поновна компилација дешава само при промени скрипте.
| Карактеристика | Gradle KTS | Groovy DSL |
|---|---|---|
| Типизирање | Статичко, проверава се при компилацији | Динамичко, проверава се у runtime-у |
| IDE подршка | Аутоматско довршавање + навигација + рефакторисање | Ограничена (динамичко типизирање) |
| Синтакса блокова | Ламбде са receiver-ом (типизиране) | Closure (нетипизиран) |
| Додељивање својстава | Преко = (compileSdk = 34) | Без знака = (compileSdk 34) |
| Прва компилација | Спорија (Kotlin компилација) | Бржа (интерпретација) |
| Накнадне изградње | Исто (кеш скрипти) | Исто |
Избор између KTS-а и Groovy-ја у 2026. години је очигледан: за нове пројекте — KTS. Google, JetBrains и Gradle препоручују KTS за све нове пројекте. Groovy остаје релевантан за подршку legacy пројеката, где миграција није целисходна због обима конфигурација или специфичних додатака некомпатибилних са KTS-ом.
Размотримо типичне конфигурационе блокове у KTS-у за Android, Kotlin Multiplatform и Compose Multiplatform. Android пројекат са KTS-ом захтева експлицитно навођење типова у конфигурацији buildTypes и productFlavors. Пример испод приказује конфигурацију апликације са два flavour-а.
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 {
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-у.
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 — процес који се може изводити постепено. Gradle подржава мешовите пројекте, где део модула користи Groovy (build.gradle), а део — KTS (build.gradle.kts). settings.gradle и root build.gradle могу бити преведени први, јер не зависе од додатака модула. Google препоручује почетак миграције са settings.gradle.kts, затим root build.gradle.kts, и тек онда модуле.
Главни кораци миграције укључују: замену синтаксе closures ламбдама, додавање знакова = за додељивање, замену стринг кључева типизираним константама и експлицитно типизирање променљивих. Android Studio пружа аутоматску конверзију Groovy → KTS за једноставне блокове, али сложене конфигурације са угнежђеним closures захтевају ручно преписивање.
| Groovy (било) | KTS (постало) |
|---|---|
| compileSdk 34 | compileSdk = 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 модулу до потпуне миграције.
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 {
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 задатка.
Често постављана питања
Обавезан за Kotlin Multiplatform пројекте. За Android и серверске пројекте, Groovy остаје подржан, али Google и Gradle препоручују KTS за нове пројекте због статичког типизирања и боље IDE подршке.
Да, Gradle подржава мешовите пројекте. Сваки модул може користити свој DSL. settings.gradle или settings.gradle.kts одређују основни DSL, али модули су независни. Ово омогућава постепену миграцију.
KTS захтева компилацију Kotlin у бајт-код пре извршавања. Ово захтева додатно време при првом покретању или након чишћења кеша. Све наредне изградње користе кеширане класе брзином упоредивом са Groovy-јем.
Већина модерних додатака је компатибилна. Проблеми настају са застарелим додацима који користе Groovy-специфичан API или Closure без Kotlin аналога. За такве додатке користите withGroovyBuilder() или оставите модул на Groovy-ју.
Након почетне компилације скрипти, перформансе изградње су идентичне Groovy-ју. Gradle кешира компилиране KTS скрипте, а поновна компилација се дешава само при њиховој промени. Разлика у брзини изградње модула је неприметна.
Закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође