Bosh sahifa Wiki Gradle

Gradle

Gradle — dasturiy loyihalarni compile qilish, testdan o‘tkazish, package yaratish va dependencylarni boshqarish uchun ishlatiladigan build automation tizimi. U Java, Kotlin, Android va boshqa ko‘plab ekotizimlarda qo‘llanadi. Gradle build jarayonini tasklar va pluginlar orqali ifodalaydi.

Gradle build scriptlari Kotlin DSL yoki Groovy DSL bilan yozilishi mumkin. Android Studio loyihalarida Gradle Android plugin bilan birga application variantlarini yaratadi.

Build script

Project root va module darajasida build fayllari bo‘ladi:

build.gradle
build.gradle.kts
settings.gradle
settings.gradle.kts

Kotlin DSL .gradle.kts, Groovy DSL .gradle extensionidan foydalanadi.

Project

Gradle build bir yoki bir nechta projectdan tashkil topadi.

Multi-project buildda:

alohida project bo‘lishi mumkin.

settings fayli qaysi modulelar buildga kirishini belgilaydi.

Task

Task builddagi bajariladigan ish birligi.

Misollar:

Task boshqa taskga dependency bo‘lishi mumkin.

Gradle directed acyclic task graph tuzadi.

Plugin

Plugin buildga task, extension va convention qo‘shadi.

Android uchun:

ishlatilishi mumkin.

Plugin versionlari build toolchain compatibility’siga ta’sir qiladi.

Dependency

External library coordinate orqali qo‘shiladi:

implementation("group:artifact:version")

Configuration dependency qayerda ishlatilishini belgilaydi:

  • implementation;
  • api;
  • testImplementation;
  • runtimeOnly;
  • boshqalar.

Android plugin qo‘shimcha configurationlar beradi.

Repository

Gradle dependencylarni repository’dan oladi.

Misollar:

  • Maven Central;
  • Google repository;
  • internal Maven;
  • local repository.

Repository tartibi va content filter supply-chain xavfsizligiga ta’sir qiladi.

Noma’lum public repository’ni keraksiz qo‘shish xavfli.

Dependency resolution

Bir dependency boshqa transitive dependencylarni olib keladi.

Turli version talab qilinsa conflict resolution qoidasi tanlaydi.

Yakuniy resolved graph report orqali tekshiriladi.

Dependency locking reproducible versionlarni saqlashga yordam beradi.

Version catalog

Dependency va plugin aliaslari markaziy katalogda saqlanishi mumkin.

Masalan:

libs.versions.toml

Bu multi-module loyihada versionlarni bir joydan boshqaradi.

Catalog dependency’ni avtomatik yangilamaydi.

Wrapper

Gradle Wrapper loyiha uchun kerakli Gradle versionini belgilaydi.

Fayllar:

  • gradlew;
  • gradlew.bat;
  • wrapper properties;
  • wrapper JAR.

Developer global Gradle o‘rnatmasdan bir xil versionni ishlatadi.

Wrapper distribution hash bilan tekshirilishi mumkin.

Build lifecycle

Gradle uch umumiy bosqichga ega:

  1. initialization;
  2. configuration;
  3. execution.

Configurationda project va task graph tayyorlanadi.

Executionda faqat talab qilingan tasklar ishlaydi.

Configuration vaqtida og‘ir I/O buildni sekinlashtiradi.

Incremental build

Task input va outputlari o‘zgarmagan bo‘lsa qayta bajarilmasligi mumkin.

Gradle up-to-date check qiladi.

Custom task input va outputni to‘g‘ri e’lon qilishi kerak.

Aks holda stale yoki keraksiz rebuild yuz beradi.

Build cache

Task outputlari cache’da saqlanadi.

Ayni input bilan boshqa build outputni qayta ishlatishi mumkin.

Local va remote cache mavjud.

Task deterministik bo‘lmasa noto‘g‘ri cache natijasi beradi.

Configuration cache

Configuration phase natijasini qayta ishlatishga yordam beradi.

Plugin va build script configuration cache talablariga mos bo‘lishi kerak.

Global mutable state va configurationdagi runtime access compatibilityni buzishi mumkin.

Daemon

Gradle Daemon JVMni buildlar orasida saqlab, startup vaqtini kamaytiradi.

CI muhitida memory va process lifecycle hisobga olinadi.

Daemon heap settinglari katta projectda muhim.

Muammo diagnostikasida daemon loglari tekshiriladi.

Android build variant

Android Gradle plugin build type va product flavorlarni birlashtirib variant yaratadi.

Masalan:

demoDebug
productionRelease

Har variant boshqa:

ga ega bo‘lishi mumkin.

Signing

Release build signing configurationdan foydalanadi.

Keystore parol va private key source controlga yozilmaydi.

CI secret yoki secure signing service ishlatiladi.

Debug signing production identity bilan aralashtirilmaydi.

Test

Gradle unit test, instrumentation test va static analysis tasklarini boshqaradi.

CI kerakli tasklarni wrapper orqali chaqiradi.

Test report va coverage artifact sifatida saqlanadi.

Task muvaffaqiyatsiz bo‘lsa build to‘xtaydi.

Custom task

Plugin yetarli bo‘lmasa custom task yaratiladi.

Task action ichida side effect bajariladi.

Input property va output file aniq e’lon qilinadi.

Build scriptni umumiy programming scriptiga aylantirish maintenance’ni qiyinlashtiradi.

Performance

Buildni tezlashtirish:

Avval build scan yoki profiler orqali bottleneck aniqlanadi.

Convention plugin

Katta multi-module loyihada bir xil compiler, test va Android settinglarini har module’da takrorlash o‘rniga convention plugin yaratiladi. U organization qoidalarini markazlashtiradi. Application va library module faqat o‘ziga xos dependency hamda parametrlarni e’lon qiladi. Plugin o‘zgarsa barcha modulelarga bir xil qoida qo‘llanadi.

Dependency verification

Gradle yuklangan artifact checksum yoki signature’larini verification metadata bilan tekshirishi mumkin. Repositorydagi package almashtirilsa build to‘xtaydi. Yangi dependency qo‘shilganda metadata code reviewdan o‘tadi.

Build scan

Build scan tasklar va dependency resolution vaqtini ko‘rsatadi. Cache miss, sekin plugin va critical path aniqlanadi. Maxfiy environment qiymatlari reportga chiqmasligi uchun sanitization qo‘llanadi.

Bog‘liq tushunchalar

Gradle, Build automation, Task, Plugin, Dependency resolution, Gradle Wrapper, Build cache, Kotlin DSL, Android Gradle Plugin, Multi-project build