settings.gradle — bu ko'p modulli loyihaning tuzilishini belgilaydigan asosiy Gradle konfiguratsiya faylidir: qaysi modullar qurilishga kiritilgan, qaysi plaginlar mavjud va bog'liqliklar qanday hal qilinadi. build.gradle har bir modulni qanday qurishni tavsiflasa, settings.gradle loyiha qaysi modullardan iboratligini tavsiflaydi. Gradle Documentation, 2025 ma'lumotlariga ko'ra, settings.gradle-ni to'g'ri konfiguratsiya qilish modullarni hal qilishni optimallashtirish orqali ko'p modulli loyihaning konfiguratsiya vaqtini 25% ga qisqartiradi. Fayl Initialization bosqichida — Gradle qurilish hayot tsiklining birinchisida bajariladi.
Asosiy ma'lumotlar
settings.gradle (yoki Kotlin DSL uchun settings.gradle.kts) — Gradle Initialization bosqichida bajaradigan fayldir. Unda loyiha ierarxiyasi aniqlanadi, modullar qo'shiladi, plaginlar va bog'liqliklar uchun repozitoriyalar sozlanadi. settings.gradle bo'lmasa, Gradle qaysi modullarni qurishni va qaysi plaginlar mavjudligini bilmaydi. Bir modulli loyihada settings.gradle bo'lmasligi mumkin — Gradle standart qiymatlardan foydalanadi, lekin ko'p modulli loyihalar uchun majburiydir.
settings.gradle fayli loyiha ildizida, asosiy build.gradle yonida joylashgan. Loyiha ildizining odatiy tuzilishi: settings.gradle.kts, build.gradle.kts, gradle.properties, local.properties, gradle/wrapper/. settings.gradle build.gradle-dan oldin bajariladi — Initialization bosqichida Gradle loyiha daraxtini quradi (Gradle API-sidagi Project). Initialization tugagandan so'ng Configuration boshlanadi — har bir modulning build.gradle faylining bajarilishi.
Tarixiy jihatdan, settings.gradle Gradle 0.7 (2010) da paydo bo'lgan va dastlab faqat include direktivalarini o'z ichiga olgan. Gradle rivojlanishi bilan settings.gradle-ga pluginManagement (Gradle 6.8), dependencyResolutionManagement (Gradle 7.0) va versionCatalogs (Gradle 7.4) qo'shildi. Zamonaviy settings.gradle — bu butun loyiha uchun plaginlar, repozitoriyalar va versiyalarni markazlashtiradigan kuchli konfiguratsiya faylidir. Google bu imkoniyatlarni AGP 8.0 dan boshlab Android Gradle Plugin-da mustahkamlaydi.
settings.gradle loyiha tuzilishini va global sozlamalarni boshqaradi (plaginlar, repozitoriyalar). build.gradle qurilishni boshqaradi (bog'liqliklar, Android konfiguratsiyalari, vazifalar). settings.gradle birinchi bajariladi va Settings API ga kirish huquqiga ega. build.gradle keyinroq bajariladi va Project API ga kirish huquqiga ega. Hech qanday modul konfiguratsiyalari (android bloki, dependencies) settings.gradle-da bo'lishi mumkin emas — bu xato.
include direktivasi settings.gradle-dagi asosiy direktivadir. U Gradle-ga qaysi modullar qurilishda ishtirok etishi kerakligini bildiradi. include argumenti — modul yo'li: include(":app") — ildizdagi modulni qo'shadi, include(":core:network") — core/network/ pastki katalogidagi modulni qo'shadi. Boshidagi ikki nuqta yo'lning loyiha ildiziga nisbatan ekanligini ko'rsatadi. include-dan so'ng, Gradle avtomatik ravishda ko'rsatilgan katalogda build.gradle-ni topadi va modulni loyiha daraxtiga qo'shadi.
Har bir include Gradle API-sida include qatoriga teng nom bilan Project yaratadi. Loyiha nomi boshqa modullarning build.gradle fayllarida implementation(project(":module")) uchun ishlatiladi. Agar modul include orqali qo'shilmagan bo'lsa, boshqa moduldan unga havola "Project not found" xatosiga olib keladi. Android Studio IDE ham Project panelida modullarni ko'rsatish uchun settings.gradle-dan foydalanadi — include bo'lmagan modullar fayl daraxtida ko'rinmaydi.
include included builds va composite builds ni includeBuild("../library-project") orqali qo'llab-quvvatlaydi. Bu butun Gradle loyihalarini tashqi modullar sifatida qo'shish imkonini beradi. Included builds kutubxonalarni ilova bilan parallel rivojlantirish uchun foydalidir: kutubxonadagi o'zgarishlar maven repozitoriyasiga nashr qilinmasdan darhol ilovada ko'rinadi. Ishlab chiqarish qurilishida includeBuild oddiy maven bog'liqligi bilan almashtiriladi.
// settings.gradle.kts — odatiy tuzilma
rootProject.name = "MyApp"
// Ilova modullari
include(":app")
include(":core:network")
include(":core:database")
include(":core:ui")
include(":feature:home")
include(":feature:profile")
include(":feature:settings")
// Tashqi kutubxonani qo'shish (composite build)
includeBuild("../my-analytics-lib") {
dependencySubstitution {
substitute(module("com.example:analytics"))
.using(project(":analytics"))
}
}
pluginManagement — settings.gradle-da Gradle plaginlari qayerdan yuklanishini belgilaydigan blok. Gradle 6.8 da plaginlarni qo'llashdan oldin markazlashtirilgan boshqarish uchun paydo bo'lgan. pluginManagement ichida joylashgan: repositories (plaginlarni qidirish uchun repozitoriyalar ro'yxati), resolutionStrategy (versiyalarni hal qilish qoidalari) va plugins (plagin versiyalarini aniq ko'rsatish). Agar pluginManagement sozlanmagan bo'lsa, Gradle build.gradle-dagi repozitoriyalardan foydalanadi — lekin plaginlar faqat e'lon qilinganidan keyin qidiriladi, bu plagin topilmasa xatolarga olib keladi.
Android loyihasida pluginManagement Versiya Kataloglari yoki Convention Plugins ishlatilganda majburiydir. pluginManagement bo'lmasa, Gradle build.gradle.kts da qo'llashda com.android.application plaginini topa olmaydi. Odatiy konfiguratsiya: repositories google() (Android plaginlari), mavenCentral() (uchinchi tomon plaginlari) va gradlePluginPortal() (rasmiy Gradle plaginlari) ni o'z ichiga oladi.
pluginManagement shuningdek plugins ni qo'llab-quvvatlaydi — versiyalar bilan plaginlarni e'lon qilish, keyin build.gradle-da versiya ko'rsatilmagan holda qo'llaniladi. Bu plagin versiyalarini markazlashtiradi: agar 10 modul kotlin-android ni qo'llasa, versiya pluginManagement-da bir marta ko'rsatiladi. Muhim: pluginManagement.plugins faqat e'lon. Plaginning o'zi build.gradle-da plugins { id("org.jetbrains.kotlin.android") } orqali qo'llaniladi.
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url = "https://jitpack.io" }
}
// Plagin versiyalari — markazlashtirilgan
plugins {
id("com.android.application") version "8.7.0"
id("com.android.library") version "8.7.0"
id("org.jetbrains.kotlin.android") version "2.0.21"
id("com.google.devtools.ksp") version "2.0.21-1.0.25"
}
resolutionStrategy {
// Barcha modullar uchun majburiy plagin versiyasi
eachPlugin {
if (requested.id.id == "com.google.gms.google-services") {
useVersion("4.4.2")
}
}
}
}
plugins {
// Plaginlarni qo'llash — apply false (ildizga qo'llanilmasin)
id("com.android.application") apply false
id("org.jetbrains.kotlin.android") apply false
}
dependencyResolutionManagement — settings.gradle-da barcha modullar uchun repozitoriyalarni markazlashtirilgan holda boshqaradigan blok. Gradle 7.0 da har bir build.gradle-da repositories e'lon qilishga muqobil sifatida paydo bo'lgan. Blok ichida repositoriesMode (rejim: PREFER_PROJECT, PREFER_SETTINGS yoki FAIL_ON_PROJECT_REPOS) va repositories (repozitoriyalar ro'yxati) o'rnatiladi. Agar repositoriesMode = PREFER_SETTINGS bo'lsa, modul repositories-lari e'tiborga olinmaydi — faqat markazlashtirilgan ro'yxat ishlatiladi.
repositoriesMode uchta qiymatga ega bo'lishi mumkin. PREFER_SETTINGS — build.gradle-dagi repozitoriyalar e'tiborga olinmaydi, faqat settings.gradle-dagilar ishlatiladi. PREFER_PROJECT — build.gradle repozitoriyalari settings.gradle ustidan ustunlikka ega. FAIL_ON_PROJECT_REPOS — agar modul o'z repozitoriyalarini e'lon qilsa, Gradle xato beradi. Yangi loyihalar uchun PREFER_SETTINGS tavsiya etiladi — bu barcha modullarning bir xil repozitoriyalardan foydalanishini kafolatlaydi va takrorlanishni bartaraf qiladi.
repositoriesMode = FAIL_ON_PROJECT_REPOS ayniqsa jamoalarda foydalidir: agar dasturchi repozitoriyani faqat bitta modulga qo'shsa, qolganlari uni ko'rmaydi, "works on my machine" holati yuzaga keladi. FAIL_ON_PROJECT_REPOS barcha repozitoriyalarni settings.gradle-da markazlashtirilgan holda e'lon qilishni majburlaydi va bunday holatlarning oldini oladi. Google AGP 8.0 dan boshlab barcha Android loyihalari uchun FAIL_ON_PROJECT_REPOS ni tavsiya qiladi.
dependencyResolutionManagement {
// FAIL_ON_PROJECT_REPOS — barcha repozitoriyalar faqat shu yerda
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = "https://jitpack.io" }
// Xususiy maven repozitoriyasi
maven {
url = "https://maven.pkg.github.com/company/internal-lib"
credentials {
username = providers.gradleProperty("gpr.user")
.getOrNull() ?: System.getenv("GPR_USER") ?: ""
password = providers.gradleProperty("gpr.key")
.getOrNull() ?: System.getenv("GPR_KEY") ?: ""
}
}
}
}
// Modulning build.gradle faylida repositories endi kerak emas!
// Barcha repozitoriyalar settings.gradle da markazlashtirilgan
Versiya Kataloglari — bu TOML fayli orqali bog'liqlik versiyalarini boshqarishning markazlashtirilgan usulidir. Gradle 7.4 dan boshlab, Versiya Kataloglari barcha Android loyihalari uchun tavsiya etilgan mexanizmdir. gradle/libs.versions.toml fayli uchta bo'limdan iborat: [versions] (versiyalar), [libraries] (bog'liqliklar), [plugins] (plaginlar). settings.gradle-da Versiya Katalogi @Suppress("UnstableApiUsage") va enableFeaturePreview("VERSION_CATALOGS") (eski Gradle versiyalarida) orqali qo'shiladi.
Versiya Katalogi qo'shilgandan so'ng, modullarning build.gradle fayllarida bog'liqliklar libs orqali ko'rsatiladi: implementation(libs.retrofit). IDE libs uchun avtomatik to'ldirishni taklif qiladi. Katalog avtomatik ravishda type-safe accessors yaratadi: libs.retrofit, libs.kotlin.coroutines, libs.bundles.compose. Bundles — bir qator bilan qo'shilishi mumkin bo'lgan bog'liqlik guruhlari. Versiya Kataloglari shuningdek merosni qo'llab-quvvatlaydi — bir nechta TOML fayllari qo'shilishi mumkin.
Versiya Kataloglarining afzalliklari: versiyalar uchun yagona joy (barcha build.gradle fayllarida qidirish shart emas); type-safe kirish (libs nomidagi xato kompilyatsiya bosqichida aniqlanadi, runtime-da emas); avtomatik yangilanishlar (Dependabot va Renovate TOML ni qo'llab-quvvatlaydi); Convention Plugins bilan muvofiqlik. Google Firebase va AndroidX o'z TOML kataloglarini tarqatadi. Versiya Kataloglariga migratsiya uchun versiyalarni build.gradle-dan TOML-ga avtomatik ko'chiradigan plaginlar mavjud.
# gradle/libs.versions.toml
[versions]
agp = "8.7.0"
kotlin = "2.0.21"
composeBom = "2024.12.01"
retrofit = "2.11.0"
coroutines = "1.9.0"
[libraries]
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
retrofit-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
compose-bom = { module = "androidx.compose:compose-bom", version.ref = "composeBom" }
compose-ui = { module = "androidx.compose.ui:ui" }
[bundles]
compose = ["compose-ui", "compose-material3"]
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
includeBuild — composite build yaratish uchun direktiva: tashqi Gradle loyihasini joriy qurilishning bir qismi sifatida qo'shish. include dan (modulni qo'shadi) farqli o'laroq, includeBuild o'z settings.gradle, modullari va plaginlari bilan butun loyihani qo'shadi. Composite builds quyidagilar uchun ishlatiladi: kutubxonalarni (analitika, tarmoq) ilova bilan parallel rivojlantirish; alohida repozitoriyadan Convention Plugins qo'shish; build-logic modulini integratsiya qilish.
Inkubatsiya xususiyatlari (Incubating Features) — enableFeaturePreview("FEATURE_NAME") orqali yoqiladigan eksperimental Gradle variantlari. AGP 8.7+ da mavjud: TYPESAFE_PROJECT_ACCESSORS (ko'p modulli loyihada loyihalarga type-safe kirish: project(":core:network") o'rniga projects.core.network yozish mumkin), STABLE_CONFIGURATION_CACHE (barqaror konfiguratsiya keshi), ARTIFACT_TRANSFORM_FOR_INTERNAL_TEST (artefaktlarni transformatsiya qilish). Inkubatsiya xususiyatlari ishlab chiqarishda yoqilishi mumkin, ammo API keyingi versiyalarda o'zgarishi mumkin.
Gradle Enterprise va Build Scan ham settings.gradle orqali sozlanadi: plugins { id("com.gradle.enterprise") } gradleEnterprise bloki bilan. Build Scan — har bir qurilish haqida batafsil ma'lumotni ko'rsatadigan bulut xizmati: har bir vazifaning bajarilish vaqti, keshlash, xatolar. Build Scan-ni yoqish qurilish tezligi bilan bog'liq muammolarni diagnostika qilishga yordam beradi. Opensource loyihalar uchun Build Scan bepul.
// Inkubatsiya xususiyatlari
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
// Gradle Enterprise / Build Scan
plugins {
id("com.gradle.enterprise") version "3.18"
}
gradleEnterprise {
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
publishAlwaysIf(true)
}
}
// build.gradle da type-safe project accessors dan foydalanish
// O'rniga: implementation(project(":core:network"))
// Mumkin: implementation(projects.core.network)
Tez-tez so'raladigan savollar
Bir modulli loyiha uchun Gradle standart qiymatlardan foydalanishi mumkin. Ammo AGP 8+ uchun har doim settings.gradle bo'lishi tavsiya etiladi, chunki pluginManagement va dependencyResolutionManagement Versiya Kataloglari va Convention Plugins ning to'g'ri ishlashi uchun majburiydir.
include joriy loyihadan modulni qo'shadi (bitta modul daraxti). includeBuild tashqi Gradle loyihasini composite build sifatida qo'shadi. includeBuild kutubxonalarni bir repozitoriyada rivojlantirish yoki Convention Plugins qo'shish uchun qulay.
settings.gradle-ga include(":nom:modul") qo'shing va build.gradle bilan katalog yarating. Android Studio modul yaratishda buni avtomatik qiladi: File → New → New Module. Qo'shgandan so'ng, Sync Project with Gradle Files ni bajaring.
Yo'q, pluginManagement faqat settings.gradle blokidir. Initialization bosqichida, har qanday build.gradle fayllari bajarilishidan oldin ishga tushadi. build.gradle-da plaginlar faqat qo'llaniladi, lekin boshqarilmaydi.
Har bir modul o'z build.gradle-ida repositories e'lon qilishi kerak bo'ladi. Bu kodning takrorlanishi va desinxronizatsiya xavfi (bir modulga repozitoriy qo'shilgan, boshqasiga — yo'q). dependencyResolutionManagement repozitoriyalarni markazlashtiradi va "works on my machine" xatolarining oldini oladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.