AXV

Dependency Management va Version Catalog

Tashqi kutubxonalar, repozitoriylar, bog'liqlik turlari va libs.versions.toml

10-sinfAdvanced Android1-hafta · 3-dars

Bugun nimani o'rganamiz?

Dependencies & Omborlar

Kutubxonalarning ichki anatomiyasi, Google Maven va Maven Central repozitoriylari

implementation vs api

Bog'liqlik turlari, modulli inkapsulyatsiya va yig'ish tezligini optimallashtirish

Version Catalog (TOML)

Sanoat standarti bo'lgan libs.versions.toml fayli va kutubxona to'plamlari (bundles)

01

Dependency va Repozitoriylar

Tashqi kutubxonalar, Group ID, Artifact ID va global omborlar

Dependency nima?

«Dasturchi har safar g'ildirakni qaytadan kashf qilmaydi. Tayyor va sinovdan o'tgan modullar kutubxona (dependency) deb ataladi.»

3 ta koordinata

Har bir kutubxona uchlikdan iborat: Group ID (domen), Artifact ID (modul nomi) va Version (versiya soni).

Global omborlar

Gradle kutubxonalarni google() (Android SDK, Jetpack) va mavenCentral() (ochiq kodli kutubxonalar) omborlaridan yuklaydi.

Kutubxonalarni yuklash va kesh tizimi

Google Maven google() AndroidX, Jetpack, Compose Material Design 3 Maven Central mavenCentral() Retrofit, OkHttp, Coil Dunyodagi ochiq kutubxonalar GRADLE CACHE Lokal omborxona (~/.gradle) .jar va .aar fayllar Tranzitiv tekshiruv Offline qayta ishlatish :app Modul Kompilyatsiya va DEX yig'ish Tayyor APK
02

Bog'liqlik Konfiguratsiyalari

implementation, api, testImplementation va ularning farqi

Bog'liqlik konfiguratsiyalari

implementation (Standart)

Kutubxona faqat shu modul ichida ko'rinadi. Tashqi modullardan yashiriladi, kompilyatsiya vaqtini sezilarli darajada tejaydi.

api (Tranzitiv eksport)

Kutubxona ushbu modulga ulangan barcha boshqa modullarga ham ochiq bo'ladi. Yig'ish vaqtini oshirishi mumkin.

compileOnly

Faqat kod yozish paytida kerak, yakuniy APK hajmiga kirmaydi (masalan, annotatsiya protsessorlari).

testImplementation

Faqat kompyuterda ishlaydigan lokal Unit-testlar uchun (JUnit, Mockito). Telefonga yuklanmaydi.

implementation vs api chegaralari

implementation (Tavsiya) To'liq inkapsulyatsiya Modul A: implementation(Retrofit) Kutubxona tashqariga chiqmaydi Modul B: Retrofit'ni KO'RMAYDI api (Tranzitiv) Barcha modullarga ochiq Modul A: api(Retrofit) Modul B: Retrofit'ni ISHLATADI
03

Versiyalarni Boshqarish Evolyutsiyasi

Tosh davridan to zamonaviy Version Cataloggacha

Versiyalashning 4 ta bosqichi

1. Hardcoded stringlar

Versiyalar to'g'ridan-to'g'ri build.gradleda yozilgan. 10 ta modul bo'lsa, har birini alohida qidirib o'zgartirish talab etilgan.

2. ext bloklari

Loyiha darajasida o'zgaruvchi ochilgan. Biroq IDE da avtomatik to'ldirish (autocomplete) ishlamagan.

3. buildSrc

Kotlin DSL yordamida yozilgan, ammo har bir o'zgarishda butun loyiha qayta kompilyatsiya bo'lib, vaqtni olgan.

4. Version Catalog (TOML)

Google tomonidan qabul qilingan sanoat standarti: barcha versiyalar bitta libs.versions.toml faylida saqlanadi!

04

Version Catalog (libs.versions.toml)

Markaziy boshqaruv, toml formati va kutubxonalar guruhlari (bundles)

libs.versions.toml faylining 4 ta bloki

[versions]

Kutubxonalar va plaginlarning versiya raqamlari yagona joyda e'lon qilinadi.

[libraries]

Kutubxonalarning Group ID, Artifact ID va versiya bog'lanishi ko'rsatiladi.

[bundles]

O'zaro bog'liq bir nechta kutubxonalar (Retrofit + Gson) bitta to'plamga birlashtiriladi.

[plugins]

Android va Kotlin Gradle plaginlari ro'yxati saqlanadi.

TOML faylining build.gradle bilan bog'lanishi

gradle/libs.versions.toml [versions] retrofit = "2.9.0" [libraries] retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } [bundles] networking = ["retrofit-core", "retrofit-converter-gson"] app/build.gradle dependencies { // Alohida kutubxona: implementation(libs.retrofit.core) // Butun boshli to'plam: implementation(libs.bundles.networking) }

Version Catalog ga kutubxona ulash

1

[versions]

Kutubxona versiyasini kiriting (masalan, coil = "2.6.0").

2

[libraries]

Guruh, modul nomi va versiya havolasini yozing (coil-compose = ...).

3

build.gradle

dependencies blokiga implementation libs.coil.compose deb qo'shing.

4

Sync Now

Sinxronizatsiya tugmasini bosing va kutubxona keshga yuklanishini kuting.

Eski usul vs Version Catalog

Eski usul (Hardcoded)

Versiyalar har bir modul faylida tarqoq yotadi.

IDE avtomatik to'ldirmaydi, xato yozish oson.

Kutubxonani yangilash uchun 10 ta faylni ochib chiqish kerak.

Yangi usul (Version Catalog)

Barcha versiyalar bitta libs.versions.toml faylida.

To'liq autocomplete: xato yozishning iloji yo'q.

Versiyani 1 joyda o'zgartirish barcha modullarni yangilaydi.

Tezkor bilim sinovi

libs.versions.toml faylida bir nechta kutubxonalarni bitta nom bilan birlashtirish uchun qaysi bo'limdan foydalaniladi?
[versions] — barcha versiyalarni birlashtiradi
[bundles] — kutubxonalarni to'plam qilib birlashtiradi
[plugins] — Gradle plaginlarini guruhlaydi
[libraries] — faqat bitta kutubxonani saqlaydi

Amaliy laboratoriya mashg'uloti

1. TOML faylini sozlash

gradle/libs.versions.toml fayliga Retrofit va Gson kutubxonalari koordinatalarini qo'shing.

2. Bundle yaratish

Ikkala kutubxonani [bundles] da networking nomi ostida birlashtiring va build.gradleda 1 qatorda ulang.

Darsning asosiy xulosalari

Toza arxitektura

implementation konfiguratsiyasi loyihani modulli va tezkor yig'ilishini ta'minlaydi.

Zamonaviy standart

Version Catalog barcha kutubxonalar va plaginlarni markazlashgan, xavfsiz va qulay boshqarish kalitidir.

Keyingi hafta: Tranzitiv bog'liqliklar va ProGuard/R8 yordamida kodni optimallashtirish