Mavzu
Fan: Advanced Android dasturlash
Sinf: 10-sinf
Mavzu: Dependency management va ziddiyatlarni hal qilish: Tranzitiv bog'liqliklar, exclude, resolutionStrategy va BOM
Darsning qisqacha mazmuni
Katta hajmdagi mobil loyihalarda o'nlab kutubxonalar ishlatiladi va ularning har biri o'z navbatida boshqa kichik modullarga tayanadi. Ushbu darsda biz murakkab bog'liqliklar zanjirini tushunish va versiyalar to'qnashuvini bartaraf etishni o'rganamiz:
- Tranzitiv bog'liqliklar (Transitive Dependencies):
- Kutubxonaning o'zi talab qiladigan va loyihaga avtomatik kirib keladigan yordamchi modullar zanjiri (masalan: Retrofit $\to$ OkHttp $\to$ Okio);
- Loyihaning kutilmaganda og'irlashib ketishi yoki versiyalar ziddiyatiga sabab bo'lishi mumkin.
- Versiya ziddiyatlari (Conflicts) va Gradle strategiyasi:
- Turli kutubxonalar bitta modulning turli versiyasini so'raganda, Gradle odatda eng yuqori (Newest) versiyani tanlaydi;
- Agar yangi versiyada eski metodlar olib tashlangan bo'lsa,
NoSuchMethodErrorkabi runtime xatoliklar yuzaga keladi.
- Bog'liqliklar daraxti (Dependency Tree):
- Terminal orqali
./gradlew app:dependenciesbuyrug'i bilan barcha yashirin modullarni ko'rish va tahlil qilish.
- Terminal orqali
- Ziddiyatlarni bartaraf etish mexanizmlari:
excludeqoidasi: Ortiqcha yoki eskirgan tranzitiv modulni chiqarib tashlash (exclude group: '...', module: '...');resolutionStrategy.force: Butun loyiha bo'ylab bitta qat'iy versiyani majburlash;- BOM (Bill of Materials): Firebase va Compose uchun barcha modullarning 100% mos versiyalari xaritasini avtomatik ta'minlovchi platforma.
Mustaqil bajarish uchun amaliy topshiriqlar
Quyidagi 10 ta amaliy vazifani diqqat bilan o'rganing va ularni Android Studio muhitida hamda daftaringizda bajaring:
1-topshiriq oson
Tranzitiv bog'liqlik (Transitive Dependency) nima ekanini oddiy hayotiy misol (masalan, mashina sotib olganda uning ichidagi ehtiyot qismlar) yordamida tushuntiring.
2-topshiriq oson
Android Studio terminalida ./gradlew app:dependencies buyrug'i nima natija qaytaradi? Loyihangizda qaysi kutubxona qanday yordamchi modullarni sudrab kelganini bilish nega muhim?
3-topshiriq oson
Agar bitta loyihada Kutubxona A OkHttp 3.12.0 ni, Kutubxona B esa OkHttp 4.10.0 ni talab qilsa, Gradle standart holda qaysi versiyani tanlaydi?
4-topshiriq o'rta
Gradle avtomatik ravishda eng yuqori versiyani tanlagan taqdirda ham ilovada nega kutilmagan runtime crash (to'xtab qolish) xatoliklari kelib chiqishi mumkin?
5-topshiriq o'rta
build.gradle faylida exclude parametri nima vazifani bajaradi? U qaysi hollarda qo'llaniladi?
6-topshiriq o'rta
Loyihangizga quyidagi kutubxona ulangan:
groovy
implementation 'com.example.library:network-tool:3.0.0'Ushbu kutubxona ichidagi commons-logging modulini loyihadan butunlay chiqarib tashlash uchun exclude qoidasini yozing.
7-topshiriq qiyin
BOM (Bill of Materials) tushunchasini tushuntiring. Nima uchun Firebase kutubxonalarini ulayotganda alohida modullarda (masalan, firebase-auth, firebase-firestore) versiya raqami yozilmaydi?
8-topshiriq qiyin
Agar sizning loyihangizda barcha modullar uchun kotlinx-coroutines-core kutubxonasining aynan 1.8.0 versiyasidan foydalanish qat'iy talab etilsa, configurations.all va resolutionStrategy.force yordamida ushbu shartni qanday ta'minlash mumkin? Kod namunasini yozing.
9-topshiriq qiyin
./gradlew app:dependencies natijasida chiqqan com.squareup.okio:okio:2.8.0 -> 3.0.0 (*) yozuvi nimani anglatadi? Strelka (->) va yulduzcha (*) belgilarining ma'nosi nima?
10-topshiriq bonus
Android Studio'da yangi loyiha oching. Terminalda ./gradlew app:dependencies --configuration releaseRuntimeClasspath buyrug'ini ishga tushiring:
- Chiqqan bog'liqliklar daraxtidan bitta tranzitiv kutubxonani aniqlang;
- Ushbu kutubxona qaysi asosiy modul tomonidan chaqirilganini yozing;
build.gradlefaylida ushbu tranzitiv modulniexcludeqilib ko'ring va qayta sinxronizatsiya qilib natijani tekshiring.
