Gradle: Android uchun qurish tizimining mohiyati va build.gradle

Muallif: IT Sectr Nashr etilgan: 2026-02-12 O'qish vaqti: 9 daq

Gradle — Android ilovalarini kompilyatsiya qilish, testlash va paketlashni avtomatlashtiradigan qurish tizimi. Apache Ant yoki Mavendan farqli o'laroq, u inkremental qurish va natijalarni keshlashni qo'llab-quvvatlaydi. Imkoniyatlar haqida batafsil rasmiy Gradle hujjatlarida o'qing. 2013 yildan boshlab ushbu vosita Android Studio-da Android loyihalari uchun standart qurish tizimi sifatida ishlatiladi.

Asosiy fikrlar

  • Gradle — 2013 yildan boshlab Android uchun standart qurish tizimi, Ant va Maven o'rnini egallagan
  • Build.gradle.kts Kotlin DSL da — turlarni tekshirish bilan zamonaviy konfiguratsiya standarti
  • Build variantlar ilovaning turli versiyalari uchun qurish turlari va mahsulot flavorlarini birlashtiradi
  • Plaginlar funksionallikni kengaytiradi: Android vositalarini qo'llashdan tortib buildlarni nashr qilishgacha
  • Inkremental qurish va keshlash qayta kompilyatsiya vaqtini bir necha marta qisqartiradi

Gradle nima?

Gradle — JVM da ishlaydigan, Java tilida yozilgan ochiq kodli qurishni avtomatlashtirish vositasi. U kirishda manba kod, bog'liqliklar va resurslarni qabul qiladi, chiqishda esa tayyor ilova — Android uchun APK yoki AAB ni beradi. Gradle asosida topshiriqlarning yo'naltirilgan asiklik grafi (DAG) kontseptsiyasi yotadi, bunda har bir topshiriq atomik ish birligi bo'lib, ular orasidagi bog'lanishlar bajarilish tartibini belgilaydi. Make yoki Ant dan farqli o'laroq, Gradle qadamlarni qo'lda tavsiflashni talab qilmaydi: topshiriqlar orasidagi bog'liqliklarni e'lon qilish kifoya va tizim o'zi optimal tartibni quradi. Bunday yondashuv Gradle ni har qanday o'lchamdagi loyihalar uchun moslashuvchan va masshtablanadigan qiladi.

Tizim uchta bajarilish fazasidan foydalanadi: initsializatsiya (ishtirok etuvchi loyihalarni aniqlash), konfiguratsiya (topshiriq grafigini qurish) va bajarish (topshiriqlarni kerakli tartibda ishga tushirish). Konfiguratsiya fazasi Gradle ning asosiy farqidir: butun qurish skripti topshiriqlar ishga tushirilishidan oldin bajariladi, bu esa shartlarga qarab grafikni dinamik o'zgartirish imkonini beradi. Bu, masalan, kodni takrorlamasdan faqat ma'lum qurish variantlari uchun topshiriqlar qo'shish imkoniyatini beradi. Quruvchi Groovy tilida yozilgan, ammo konfiguratsiya fayllari ikkita tilni qo'llab-quvvatlaydi: Groovy DSL va Kotlin DSL.

Gradle Android loyihalarini qurishni qanday boshqaradi?

Android uchun Gradle plagini — com.android.application va com.android.library bo'lib, ular loyihaga Android vositalari bilan ishlash uchun topshiriqlar qo'shadi. Dasturchi qurishni ishga tushirganda, Gradle ketma-ket o'nlab topshiriqlarni bajaradi: Kotlin va Java ni javac yoki kotlinc orqali kompilyatsiya qilish, AAPT2 orqali resurslarni qayta ishlash, R.java ni generatsiya qilish, D8 yoki R8 orqali baytkodni DEX ga kompilyatsiya qilish, APK ni imzolash va ziplash. Har bir topshiriq uning kirish ma'lumotlari o'zgarganligini tekshiradi va agar o'zgarmagan bo'lsa — keshlangan natijadan foydalanadi. Bu mexanizm inkremental qurish deb ataladi va qayta kompilyatsiyani to'liq qayta qurishga nisbatan 60–80% ga tezlashtiradi.

Android modulining konfiguratsiyasi build.gradle.kts faylining android blokida beriladi. Blok ichida compileSdk, minSdk, targetSdk, ilova versiyasi, imzolar va boshqa parametrlar aniqlanadi. Gradle har bir modul uchun avtomatik ravishda bir nechta qurish variantini yaratadi — tur (release, debug) va flavor kombinatsiyasi. Masalan, ikkita flavor va ikkita turga ega modul uchun Gradle to'rtta topshiriq yaratadi: assembleDemoDebug, assembleDemoRelease, assembleFullDebug, assembleFullRelease. Bu topshiriqlarning barchasini alohida bajarish yoki barcha variantlar uchun bitta buyruq bilan ishga tushirish mumkin.

Build.gradle va build.gradle.kts: konfiguratsiya tuzilmasi

Har bir Android loyihasi ikki darajali konfiguratsiyani o'z ichiga oladi: ildiz build.gradle.kts (barcha modullar uchun sozlamalar) va modul build.gradle.kts (muayyan modul uchun sozlamalar). Ildiz faylda plaginlar qo'llanilmasdan e'lon qilinadi, repozitoriyalar va umumiy o'zgaruvchilar ko'rsatiladi. Modul faylida plaginlar muayyan modulga qo'llaniladi va qurish parametrlari sozlanadi. Bunday yondashuv versiyalar katalogi yoki ext-bloki orqali bog'liqlik versiyalarini markazlashtirilgan holda boshqarish imkonini beradi.

Kotlin
@Suppress("UnstableApiUsage")
plugins {
    id("com.android.application") version "8.2.2"
    id("org.jetbrains.kotlin.android") version "1.9.22"
}

android {
    namespace = "com.example.myapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
}

Dependencies bloki — build.gradle.kts ning yana bir muhim elementidir. Unda ilova uchun kerakli kutubxonalar, modullar va fayl bog'liqliklari sanab o'tiladi. Gradle bir nechta bog'liqlik konfiguratsiyasini qo'llab-quvvatlaydi: implementation (faqat joriy modulga mavjud), api (bog'liq modullarga ham mavjud), testImplementation (faqat testlar uchun), androidTestImplementation (instrumental testlar uchun) va compileOnly (faqat kompilyatsiya bosqichida). Har bir konfiguratsiya bog'liqlik grafigida sinflarning ko'rinishini boshqaradi, bu esa qurish vaqtiga va yakuniy artefakt hajmiga ta'sir qiladi.

Kotlin
dependencies {
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
}

Build variantlar: ilovani qurish variantlari

Build variant — build type va product flavor kombinatsiyasi bo'lib, noyob sozlamalar, kod va resurslar bilan ilova versiyasini belgilaydi. Build type (qurish turi) paketlash parametrlarini belgilaydi: debug (nosozliklarni tuzatish bilan va .debug suffiksi bilan) yoki release (obfuskatsiya va imzo bilan). Product flavor (mahsulot flavori) funksional variantlarni belgilaydi: masalan, demo (cheklangan versiya) va full (qo'shimcha imkoniyatlar bilan to'liq versiya). Gradle har bir kombinatsiya uchun avtomatik topshiriqlar yaratadi, bu esa barcha versiyalarni bitta buyruq bilan qurish imkonini beradi.

Kotlin
android {
    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        debug {
            applicationIdSuffix = ".debug"
        }
    }
    flavorDimensions += "version"
    productFlavors {
        create("demo") {
            dimension = "version"
            applicationIdSuffix = ".demo"
        }
        create("full") {
            dimension = "version"
            applicationIdSuffix = ".full"
        }
    }
}

Har bir build variant uchun alohida source set mavjud. Gradle src/demo/release, src/full/debug va boshqa kataloglardan foydalanadi, ularda muayyan variant uchun noyob resurslar, manifestlar va manba kodlar saqlanadi. Umumiy kod src/main da qoladi. Bunday yondashuv asosiy mantiqni qayta ishlatish va faqat farq qiladigan qismlarni almashtirish imkonini beradi: satrlar, piktogrammalar, API endpointlari yoki konfiguratsiya fayllari. Source set main dan istalgan resursni bekor qilishi mumkin: manifest, drawable, values yoki hatto Kotlin sinflari. Muayyan variantni qurishda Gradle main va tegishli source set dan fayllarni birlashtiradi, variantdagi fayllar ustunlikka ega.

Android uchun Gradle plaginlari: imkoniyatlarni kengaytirish

Gradle plaginlari ekotizimi Android ilovalarini ishlab chiqishning barcha bosqichlarini qamrab oladi. Google dan rasmiy plaginlar com.android.application (ilova moduli uchun), com.android.library (kutubxona moduli uchun), com.android.test (test modullari uchun) va JetBrains dan Kotlin plaginlarini o'z ichiga oladi. Plaginlar loyihaga yangi topshiriqlar qo'shadi, DSL ni yangi konfiguratsiya bloklari bilan kengaytiradi va qo'shimcha vositalarni ulaydi. com.android.application plagini bo'lmasa, loyiha APK qura olmaydi: bu plagin barcha Android-spesifik topshiriqlarni ro'yxatdan o'tkazadi va ularni qurish grafigida bog'laydi.

Uchinchi tomon plaginlari torroq vazifalarni hal qiladi. Google Services (com.google.gms.google-services) Firebase va Google Play Services ni integratsiya qiladi, qurishga avtomatik ravishda google-services.json ni qo'shadi. Hilt (dagger.hilt.android.plugin) kompilyatsiya bosqichida bog'liqliklarni kiritish uchun kod yaratadi. Safe Args (androidx.navigation.safeargs.kotlin) fragmentlar orasida navigatsiya uchun tip-xavfsiz sinflar yaratadi. Har bir plagin ildiz build.gradle.kts da plugins bloki orqali ulanadi va odatda minimal konfiguratsiyani talab qiladi. Gradle plaginlar orasidagi tranzitiv bog'liqliklarni avtomatik hal qiladi va Bom fayllari hamda versiyalar katalogi orqali versiya mosligini kafolatlaydi.

Gradle tasklari: qurish jarayonlarini avtomatlashtirish

Task (topshiriq) — Gradle da atomik ish birligi. Har bir topshiriqning kirish ma'lumotlari, chiqish ma'lumotlari va harakati bor. Android uchun o'rnatilgan topshiriqlar assemble (barcha variantlarni qurish), lint (kodni tekshirish), test (unit testlarni ishga tushirish) va clean (vaqtinchalik fayllarni tozalash) ni o'z ichiga oladi. Dasturchi Groovy yoki Kotlin DSL yordamida o'z topshiriqlarini qo'shishi mumkin. Shaxsiy topshiriqlar muntazam operatsiyalarni avtomatlashtirish uchun foydali: hisobotlarni yaratish, artefaktlarni nusxalash, test qurilmalariga joylashtirish yoki CI tizimlari bilan integratsiya.

Kotlin
tasks.register("printBuildInfo") {
    description = "Qurish haqida ma'lumotni chiqaradi"
    group = "custom"
    doLast {
        println("Build variant: ${project.name}")
        println("Version: ${android.defaultConfig.versionName}")
    }
}

Har bir topshiriq dependsOn mexanizmi orqali boshqa topshiriqlarga bog'liq bo'lishi mumkin. Agar A topshirig'i B topshirig'iga bog'liq bo'lsa, Gradle B ning A dan oldin bajarilishini kafolatlaydi. Tizim har bir juftlik uchun qo'lda tartibni ko'rsatishni talab qilmaydi — bog'liqliklarni e'lon qilish kifoya va Gradle mustaqil topshiriqlarni parallel bajarish uchun optimallashtirilgan yo'naltirilgan grafik quradi. Android plagining o'rnatilgan topshiriqlari allaqachon bir-biri bilan bog'langan: lint kompilyatsiyaga bog'liq, test assemble ga bog'liq, assembleDebug compileDebugKotlin ga bog'liq. Dasturchi o'z topshiriqlarini dependsOn, mustRunAfter yoki shouldRunAfter yordamida grafikning istalgan tuguniga joylashtirishi mumkin.

Gradle bilan ishlashda tipik xatolar

Tez-tez uchraydigan muammolardan biri — bog'liqlik versiyalarining konflikti, ikki kutubxona bir xil tranzitiv bog'liqlikning turli versiyalarini talab qilganda. Gradle konflikt xatosi haqida xabar beradi, lekin har doim avtomatik yechim taklif qilmaydi. Diagnostika uchun ./gradlew :app:dependencies buyrug'idan foydalaning, u bog'liqliklarning to'liq daraxtini ko'rsatadi. Konfliktli kutubxona versiyasini resolutionStrategy bloki orqali majburiy ko'rsatish tavsiya etiladi. Yana bir keng tarqalgan stsenariy — inkremental qayta ishlash yo'qligi sababli sekin qurish. Barcha plaginlar yangilanganligini, Gradle Daemon yoqilganligini (org.gradle.daemon=true) va gradle.properties da yetarli xotira ko'rsatilganligini tekshiring: org.gradle.jvmargs=-Xmx4096m.

Keshlash bilan bog'liq muammolar bog'liqliklar yangilangandan so'ng yuzaga keladi: Gradle eskirgan keshlardan foydalanishi mumkin va qurish xato bilan tugaydi. Yechim — qurishni --refresh-dependencies bayrog'i bilan ishga tushirish yoki ./gradlew cleanBuildCache orqali keshlarni qo'lda tozalash. Chastota bo'yicha uchinchi xato — Android Gradle Plugin (AGP) va Gradle versiyalarining mos kelmasligi. AGP ning har bir versiyasi ma'lum minimal Gradle versiyasini talab qiladi. Moslik jadvali developer.android.com saytida e'lon qilinadi. Agar versiyalar mos kelmasa, Gradle konfiguratsiya bosqichida minimal talab qilinadigan versiya haqidagi xabar bilan xato beradi. Har doim Gradle wrapper versiyasining AGP talablariga mos kelishini tekshiring.

Tez-tez beriladigan savollar

Gradle oddiy so'zlar bilan nima?

Gradle — loyihalarni qurish uchun dastur-avtomatlashtiruvchidir. U sizning Kotlin yoki Java manba kodingizni oladi, kutubxonalarni internetdan ulaydi, hamma narsani baytkodga kompilyatsiya qiladi va APK ga paketlaydi. JVM da ishlaydi va qo'lda ko'rsatmalar o'rniga deklarativ skriptlardan foydalanadi. Dasturchi faqat qoidalarni tavsiflashi kerak, qolganini Gradle o'zi qiladi.

Build.gradle.kts build.gradle dan qanday farq qiladi?

Build.gradle Groovy tilida yoziladi — moslashuvchan sintaksis va kamroq qat'iylikka ega dinamik til. Build.gradle.kts Kotlin DSL dan foydalanadi: qat'iy tiplash, Android Studio da avtomatik to'ldirish va kompilyatsiya bosqichida xatolarni tekshirish. Google barcha yangi loyihalar uchun Kotlin DSL ni tavsiya qiladi. Groovy fayllarini ko'chirish osonroq, ammo Kotlin fayllarini qo'llab-quvvatlash ishonchliroq.

Gradle qurishini qanday tezlashtirish mumkin?

Gradle Daemon (org.gradle.daemon=true) va parallel qurishni (org.gradle.parallel=true) yoqing. JVM xotirasini org.gradle.jvmargs orqali 4–8 GB gacha oshiring. Talab bo'yicha loyiha konfiguratsiyasidan foydalaning (org.gradle.configureondemand=true). Android loyihalari uchun topshiriq keshlashni va faqat kerakli ABI uchun qurishni sozlang. Android Studio da tor joylarni topish uchun Build Analyzer ni ishga tushiring.

Android da build variant nima?

Build variant — build type (masalan, debug yoki release) va product flavor (masalan, demo yoki full) ning kombinatsiyasi. Har bir variant o'z paket nomi, versiyasi, resurslari va manba fayllariga ega bo'lishi mumkin. Gradle har bir variant uchun avtomatik ravishda alohida qurish topshirig'ini yaratadi. Bu bir loyihadan ilovaning bir nechta versiyasini qurish imkonini beradi.

Gradle da bog'liqlikni qanday qo'shish mumkin?

Bog'liqliklar build.gradle.kts faylining dependencies blokida qo'shiladi. Yozuv formati: configuration("group:artifact:version"). Masalan, implementation("androidx.core:core-ktx:1.12.0"). Testlar uchun testImplementation, instrumental testlar uchun androidTestImplementation dan foydalaning. Versiyalarni libs.versions.toml fayli orqali alohida versiyalar katalogiga (version catalog) chiqarish qulay.

Xulosa

  • Gradle — JVM da ishlaydigan va DAG topshiriq grafigidan foydalanadigan Android uchun standart qurish tizimi
  • Inkremental qurish va keshlash qayta kompilyatsiya vaqtini 60–80% ga qisqartiradi
  • Kotlin DSL (build.gradle.kts) — avtomatik to'ldirish va tip tekshirishi bilan zamonaviy konfiguratsiya formati
  • Build variantlar build type va product flavor ni birlashtiradi, har bir variant uchun alohida source set yaratadi
  • Plaginlar Gradle ni kengaytiradi: asosiy Android plaginidan tortib Firebase, Hilt va Safe Args gacha
  • Shaxsiy tasklar qurish va integratsiyaning istalgan bosqichlarini avtomatlashtirish imkonini beradi
  • Asosiy muammolar — versiya konfliktlari, sekin qurish va AGP ning Gradle versiyasi bilan mos kelmasligi

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.

Loyihani muhokama qilish

Shuningdek o'qing