Gradle KTS – bu, Groovy əvəzinə Kotlin dilində build-skriptlər yazmağa imkan verən Gradle tikinti sistemi üçün Kotlin DSL-dir. .gradle.kts genişlənməsi olan fayllar statik tipizasiyanı, IntelliJ IDEA və Android Studio-da avtomatik tamamlamanı, həmçinin Kotlin sintaksisi vasitəsilə Gradle API-yə birbaşa girişi dəstəkləyir. Google AGP 7.0-dan başlayaraq Android layihələri üçün KTS-ni tövsiyə edir, Kotlin Multiplatform isə KTS-dən standart konfiqurasiya formatı kimi istifadə edir. Gradle, 2025 məlumatlarına görə, yeni layihələrin 60%-dən çoxu build-skriptlər yazmaq üçün Groovy əvəzinə KTS-ni seçir.
Əsas məqamlar
Gradle KTS – bu, Gradle konfiqurasiya fayllarını yazmaq üçün Groovy-yə alternativ təqdim edən Kotlin DSL-dir (Domain Specific Language). Groovy sintaksisi əvəzinə tərtibatçılar Kotlin-dən – konfiqurasiyanın düzgünlüyünü kompilasiya mərhələsində yoxlayan sərt tipli dildən istifadə edirlər. KTS ilk dəfə 2018-ci ildə Gradle 5.0-da eksperimental funksiya kimi təqdim edilmiş və Gradle 6.0-da sabitliyə çatmışdır.
KTS-nin əsas məqsədi build-skriptlərdə Groovy-nin çatışmazlıqlarını aradan qaldırmaqdır. Groovy – dinamik tipli dildir, burada konfiqurasiya səhvləri yalnız tapşırığın icrası zamanı runtime-da özünü göstərir. KTS Kotlin-in statik tipizasiyası sayəsində eyni səhvləri kod redaktəsi mərhələsində aşkar etməyə imkan verir. Əlavə olaraq, KTS tiplərin tam sənədləşdirilməsi ilə Gradle API-yə giriş təmin edir ki, bu da mürəkkəb konfiqurasiya bloklarının öyrənilməsini və istifadəsini əhəmiyyətli dərəcədə asanlaşdırır.
KTS ekosistemi bütün əsas alətlər tərəfindən dəstəklənir: Android Studio, IntelliJ IDEA, Kotlin plaginli VS Code və Gradle Build Tool. Bütün müasir plaginlər (Android Gradle Plugin, Kotlin Multiplatform, Protobuf, Compose) aşkar tiplərlə Kotlin-dostluq API təqdim edir ki, bu da KTS-ni yeni layihələr üçün üstünlük verilən seçim edir.
Gradle KTS .gradle.kts fayllarını emal etmək üçün Kotlin kompilyatorundan istifadə edir. Gradle genişlənməni tanıyır və skriptləri emal üçün Kotlin skript mühərrikinə ötürür, o da onları siniflərə kompilyasiya edir. Bu siniflər daha sonra layihə modelini qurmaq üçün Gradle tərəfindən icra edilir. Groovy-dən əsas fərq: KTS skriptləri dinamik şərh edilmək əvəzinə əvvəlcədən kompilyasiya olunur ki, bu da tapşırıqların icrası başlamazdan əvvəl səhvləri aşkar etməyə imkan verir.
KTS arxitekturası kotlin-scripting-ə əsaslanır. Hər bir .gradle.kts faylı Gradle API-nin gizli importları olan Kotlin skriptidir. Tərtibatçı Kotlin-in istənilən konstruksiyalarından istifadə edə bilər: extension-funksiyalar, lambdalar, data-siniflər və hətta build-skript daxilində köməkçi funksiyalar elan edə bilər. Gradle blokların tipli konfiqurasiyası üçün extension-funksiyalar dəsti təqdim edir: dependencies, android, kotlin və s.
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 və Groovy arasındakı əsas fərqlərdən biri tiplərlə işdir. Groovy-də bütün konfiqurasiyalar Object qəbul edir, KTS-də isə konkret Kotlin tipləri. Məsələn, compileSdk string deyil, Int qəbul edir. Bu, səhv tiplə bağlı səhvləri aradan qaldırır: Groovy-də compileSdk 34 və compileSdk “34” eyni işləyir, KTS-də yalnız birinci variant. Bu cür sərtlik konfiqurasiyanı daha proqnozlaşdırıla bilən və sənədləşdirilmiş edir.
Groovy Gradle üçün orijinal DSL idi və tam dəstəklənməyə davam edir. Bununla birlikdə, KTS onu yeni layihələr üçün tövsiyə edilən edən bir sıra üstünlüklər təklif edir. Statik tipizasiya, IDE-də daha yaxşı redaktə performansı və daha sərt sintaksis – KTS-yə keçidin əsas səbəbləri. Eyni zamanda, Groovy sadə konfiqurasiyalar üçün yığcamlıq üstünlüyünü qoruyur.
KTS və Groovy-də tikinti performansı skriptlərin kompilyasiyasından sonra praktiki olaraq eynidir. KTS skriptləri ilk işə salındıqda və ya keş təmizləndikdən sonra daha uzun kompilyasiya olunur, lakin sonrakı tikintilər Groovy skriptləri ilə eyni sürətlə işləyir. Gradle kompilyasiya edilmiş KTS skriptlərini build kataloqunda keşləyir, buna görə də təkrar kompilyasiya yalnız skript dəyişdikdə baş verir.
| Xüsusiyyət | Gradle KTS | Groovy DSL |
|---|---|---|
| Tipizasiya | Statik, kompilyasiyada yoxlanılır | Dinamik, runtime-da yoxlanılır |
| IDE dəstəyi | Avtomatik tamamlama + naviqasiya + refaktorinq | Məhdud (dinamik tipizasiya) |
| Blok sintaksisi | Receiver ilə lambdalar (tipli) | Closure (tipi olmayan) |
| Xüsusiyyətlərin təyin edilməsi | = vasitəsilə (compileSdk = 34) | = işarəsi olmadan (compileSdk 34) |
| İlk kompilyasiya | Daha yavaş (Kotlin kompilyasiyası) | Daha sürətli (interpretasiya) |
| Sonrakı tikintilər | Eyni (skript keşi) | Eyni |
2026-cı ildə KTS və Groovy arasında seçim aydındır: yeni layihələr üçün – KTS. Google, JetBrains və Gradle bütün yeni layihələr üçün KTS-ni tövsiyə edir. Groovy, konfiqurasiyaların həcmi və ya KTS ilə uyğun olmayan spesifik plaginlər səbəbindən miqrasiyanın məqsədəuyğun olmadığı legacy layihələrinə dəstək üçün aktual qalır.
Android, Kotlin Multiplatform və Compose Multiplatform üçün KTS-də tipik konfiqurasiya bloklarını nəzərdən keçirək. Android layihəsi KTS ilə buildTypes və productFlavors konfiqurasiyasında tiplərin açıq şəkildə göstərilməsini tələb edir. Aşağıdakı nümunə iki flavour'lu tətbiqin konfiqurasiyasını göstərir.
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 üçün KTS məcburidir – Groovy çoxplatformalı modulların konfiqurasiyasını düzgün dəstəkləmir. KMM modulunun konfiqurasiyası hədəf platformaların və source set'lerin qurulmasını əhatə edir. Aşağıdakı nümunə iOS və Android ilə shared modulunun konfiqurasiyasını göstərir.
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 build-skript daxilində köməkçi Kotlin funksiyalarını elan etməyə imkan verir. Bu, imzalama konfiqurasiyaları və ya versiya idarəetməsi kimi təkrarlanan konfiqurasiyalar üçün xüsusilə rahatdır. Statik tipizasiya sayəsində bu funksiyaları kompilasiya mərhələsində parametrlərin yoxlanılması ilə çağırmaq olar ki, bu da Google Play-də nəşrdən əvvəl imzalama konfiqurasiyalarında səhvləri aradan qaldırır.
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-də istifadə
configureSigning()
Miqrasiya Groovy-dən KTS-yə – tədricən həyata keçirilə bilən prosesdir. Gradle qarışıq layihələri dəstəkləyir, burada modulların bir hissəsi Groovy (build.gradle), digər hissəsi isə KTS (build.gradle.kts) istifadə edir. settings.gradle və root build.gradle ilk olaraq çevrilə bilər, çünki onlar modul plaginlərindən asılı deyil. Google miqrasiyaya settings.gradle.kts, sonra kök build.gradle.kts və yalnız bundan sonra modullarla başlamağı tövsiyə edir.
Miqrasiyanın əsas addımlarına daxildir: closures sintaksisinin lambdalarla əvəz edilməsi, təyinatlar üçün = işarələrinin əlavə edilməsi, string açarların tipli sabitlərlə əvəz edilməsi və dəyişənlərin açıq tipləşdirilməsi. Android Studio sadə bloklar üçün avtomatik Groovy → KTS çevrilməsi təmin edir, lakin iç-içə closures ilə mürəkkəb konfiqurasiyalar əl ilə yenidən yazılmasını tələb edir.
| Groovy (idi) | KTS (oldu) |
|---|---|
| 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” |
Miqrasiya zamanı tipik problemlərə Kotlin ekvivalenti olmayan Groovy metodlarının gizli çağırışları və Kotlin-dostluq API təmin etməyən plaginlər daxildir. Birinci problemi həll etmək üçün Gradle withGroovyBuilder vasitəsilə uyğunluq təmin edir – KTS-dən Groovy metodlarını çağırmağa imkan verən mexanizm. İkincisi üçün – plagin yenilənməsini gözləmək və ya tam miqrasiyaya qədər onu Groovy modulunda istifadə etmək lazımdır.
Kotlin Multiplatform – KTS-nin məcburi tələb olduğu əsas layihədir. kotlin multiplatform plagini hədəf platformaların, source set'lerin və framework binar fayllarının konfiqurasiyası üçün yalnız Kotlin DSL vasitəsilə mövcud olan genişlənmələr təqdim edir. Groovy çoxplatformalı konfiqurasiyanı düzgün dəstəkləmir, buna görə də KMM layihələri yalnız KTS-dən istifadə edir.
KTS-də KMM konfiqurasiyası qeyri-standart blokları əhatə edir: platformaları göstərmək üçün kotlin.target, ümumi və platforma kodunun təşkili üçün kotlin.sourceSets, CocoaPods ilə inteqrasiya üçün kotlin.cocoapods və JDK seçimi üçün kotlin.jvmToolchain. Hər blok Android Studio-da avtomatik tamamlamalı ciddi tipli API-yə malikdir ki, bu da bir neçə platformalı mürəkkəb KMM layihəsinin konfiqurasiyası üçün xüsusilə dəyərlidir.
kotlin {
iosArm64()
iosSimulatorArm64()
iosX64()
cocoapods {
summary = "Shared Kotlin module"
homepage = "https://itsectr.com"
framework {
baseName = "Shared"
isStatic = false
}
pod("Alamofire") {
version = "5.9"
}
}
}
KTS-nin statik tipizasiyası sayəsində KMM tərtibatçıları source set'lər və asılılıqlar üçün avtomatik tamamlama, framework konfiqurasiyasının tip yoxlanışı və platforma adlarının refaktorinqi imkanı əldə edirlər. KTS həmçinin debug-u asanlaşdırır: KMM konfiqurasiyasındakı səhvlər, səhvlərin Gradle tapşırığının icrasına qədər gizlənə biləcəyi Groovy-dən fərqli olaraq, başa düşülən mesajlarla Kotlin kompilasiya səhvləri kimi göstərilir.
Tez-tez verilən suallar
Kotlin Multiplatform layihələri üçün məcburidir. Android və server layihələri üçün Groovy dəstəklənməyə davam edir, lakin Google və Gradle statik tipizasiya və daha yaxşı IDE dəstəyinə görə yeni layihələr üçün KTS-ni tövsiyə edir.
Bəli, Gradle qarışıq layihələri dəstəkləyir. Hər modul öz DSL-ni istifadə edə bilər. settings.gradle və ya settings.gradle.kts kök DSL-ni müəyyən edir, lakin modullar müstəqildir. Bu, tədricən miqrasiyaya imkan verir.
KTS icradan əvvəl Kotlin-in bayt-koda kompilyasiyasını tələb edir. Bu, ilk işə salındıqda və ya keş təmizləndikdən sonra əlavə vaxt aparır. Bütün sonrakı tikintilər Groovy ilə müqayisə edilə bilən sürətlə keşlənmiş siniflərdən istifadə edir.
Müasir plaginlərin əksəriyyəti uyğundur. Problem Groovy-spesifik API və ya Kotlin analoqu olmayan Closure istifadə edən köhnəlmiş plaginlərlə yaranır. Belə plaginlər üçün withGroovyBuilder() istifadə edin və ya modulu Groovy-də saxlayın.
Skriptlərin ilkin kompilyasiyasından sonra tikinti performansı Groovy ilə eynidir. Gradle kompilyasiya edilmiş KTS skriptlərini keşləyir və təkrar kompilyasiya yalnız onlar dəyişdikdə baş verir. Modulların tikinti sürətindəki fərq hiss edilməzdir.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun