Transitive dependencies, Dependency Tree, exclude qoidalari va BOM platformasi
10-sinfAdvanced Android2-hafta · 4-darsKutubxonalarning yashirin zanjiri va ilovaga avtomatik qo'shiluvchi yordamchi modullar
Versiya to'qnashuvlari sababi va ./gradlew app:dependencies daraxti tahlili
Ortiqcha modullarni chiqarib tashlash va yagona mos versiyalar xaritasini boshqarish
Bitta kutubxona ortidan kirib keladigan yashirin modullar zanjiri
Retrofit o'z ishini bajarish uchun OkHttp'ga, OkHttp esa Okio kutubxonasiga tayanadi. Bu zanjir avtomatik yuklanadi.
Bir nechta kutubxona bitta yordamchi modulning turli versiyalarini talab qilsa, ziddiyat (conflict) paydo bo'ladi.
To'qnashuv sabablari va Gradle tanlov strategiyasi
Loyiha tarkibidagi Kutubxona A OkHttp 3.14.9 versiyasini talab qilsa, Kutubxona B esa OkHttp 4.12.0 ni talab qiladi.
Gradle sukut bo'yicha eng yuqori versiyani (4.12.0) tanlaydi. Ammo bu eski kutubxona bilan kutilmagan crash berishi mumkin.
Terminal yordamida loyihaning barcha yashirin qatlamlarini ko'rish
./gradlew app:dependencies \
--configuration releaseRuntimeClasspath
Loyiha modulidagi barcha kutubxonalar va ularning tranzitiv shoxlarini to'liq daraxt ko'rinishida chiqaradi.
-> 4.12.0 — Gradle eski versiyani yangisiga avtomatik ko'targanini bildiradi.
(*) belgisi — Ushbu kutubxonaning shoxlari yuqorida allaqachon ko'rsatilgani va takrorlanmasligini bildiradi.
exclude qoidalari, force strategiyasi va BOM platformasi
Kutubxona tarkibidagi aniq bitta keraksiz yoki ziddiyatli modulni to'xtatish:
implementation('com.lib:tool:1.0') {
exclude group: 'org.old', module: 'unused'
}
Loyiha bo'ylab bitta qat'iy versiyani majburiy qilib o'rnatish:
configurations.all {
resolutionStrategy.force 'com.squareup.okhttp3:okhttp:4.12.0'
}
Logcat yoki build jarayonida NoSuchMethodError yoki moslik xatolarini payqash.
Terminalda ./gradlew app:dependencies buyrug'i orqali to'qnashuv manbasini topish.
Eski modullarni exclude qilish yoki yagona versiyani force bilan majburlash.
Loyihani "Sync Now" qilish va barcha funksiyalar to'g'ri ishlashini sinovdan o'tkazish.
Har bir kutubxona ixtiyoriy versiyalarni tortib keladi.
Ilova hajmi keraksiz dublikat modullar bilan shishib ketadi.
Telefonda ilova kutilmaganda "crash" bo'ladi.
Bog'liqliklar daraxti doimiy tekshiriladi.
Ortiqcha modullar exclude orqali tozalanadi.
BOM va markazlashgan Version Catalog orqali to'liq barqarorlik.
Terminalda ./gradlew app:dependencies buyrug'ini ishga tushiring va Retrofit qaysi OkHttp versiyasini tortganini aniqlang.
Biror kutubxona uchun exclude qoidasini yozing, "Sync Now" qiling va daraxtda ushbu modul yo'qolganini tasdiqlang.
Tranzitiv kutubxonalar qulay, biroq ularning versiyalari ziddiyat bermasligini nazorat qilish shart.
exclude, resolutionStrategy va BOM har qanday murakkab versiya to'qnashuvini professional hal qiladi.
Keyingi dars: ProGuard va R8 yordamida kodni optimallashtirish (1-qism)