AXV

Dependency turlari

implementation, api, compileOnly, runtimeOnly, testImplementation, androidTestImplementation

10-sinfAdvanced Android6-hafta · 18-dars

Bugun nimalarni o'rganamiz?

implementation va api

Kim ko'radi?

compileOnly va runtimeOnly

Qachon kerak

Test turlari

testImplementation va boshqalar

Takrorlash

Ziddiyat qaysi buyruq bilan ko'riladi?

Daraxt ziddiyatni ko'rsatadi.
01

implementation va api

Kim ko'radi?

Ko'rinish

core:implementation app ko'rmaydi core: api app ko'radi api bog'liqlikni boshqa modullarga uzatadi

core moduli


// core/build.gradle.kts
dependencies {
    implementation("com.google.code.gson:gson:2.10.1")   // faqat core ichida
    api("com.squareup.retrofit2:retrofit:2.9.0")         // app ham ko'radi
}

// app/build.gradle.kts
dependencies {
    implementation(project(":core"))
}
  
Shubhalansangiz, implementation yozing. api keraksiz yozilsa, modullar orasida ortiqcha bog'liqlik va sekin build paydo bo'ladi.

Mini-test

Kutubxonani boshqa modullarga ham ochish uchun qaysi tur?

api bog'liqlikni ochiq qiladi.
02

compileOnly va runtimeOnly

Qachon kerak

Qachon kerak

Kompilyatsiya APK ichi implementation:ikkalasi compileOnly /runtimeOnly: biri Tur kutubxonaning qaysi bosqichda kerakligini belgilaydi

Turlar


dependencies {
    implementation("io.coil-kt:coil-compose:2.3.0")    // kompilyatsiya + ish vaqti
    compileOnly("javax.annotation:jsr250-api:1.0")     // faqat kompilyatsiya
    runtimeOnly("org.postgresql:postgresql:42.7.3")   // faqat ish vaqti
}
  
compileOnly kutubxonasi APK ga tushmaydi: ish vaqtida kerak bo'lsa, ilova «class topilmadi» xatosi beradi.

Mini-test

compileOnly kutubxona APK ga qo'shiladimi?

Faqat kompilyatsiya vaqtida kerak.
03

Test turlari

testImplementation va boshqalar

Tur tanlash

Ilova kodi:implementation Boshqamodul: api Unit test:testImplementation Qurilma testi Tur kutubxona nima uchun kerakligini aytadi

Test kutubxonalari


dependencies {
    implementation("io.coil-kt:coil-compose:2.3.0")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
  
JUnit ni implementation bilan yozsangiz, u release APK ga tushadi va hajmni oshiradi.

Mini-test

JUnit uchun qaysi tur to'g'ri?

Unit testlar uchun.

Noto'g'ri va to'g'ri tur

Hammasi api

Modullar bir-biriga bog'lanib qoladi, build sekin
VS

Asosan implementation

Bog'liqlik yashirin, build tezroq

Eng tor ko'rinishni tanlang.

Atamalar. Bosing

implementation

bosing

Faqat joriy modul ichida ko'rinadi

api

bosing

Boshqa modullarga ham ochiladi

compileOnly

bosing

Faqat kompilyatsiya vaqtida

runtimeOnly

bosing

Faqat ish vaqtida

Tur tanlash

1. Savol

Bu kutubxona kimga kerak?

2. Tanlov

Faqat menga: implementation; boshqalarga: api.

3. Test

Faqat test uchun: test turlari.

Dependency turlari

TurKo'rinishMisol
implementationjoriy modulCoil
apiboshqa modullar hamcore dagi Retrofit
compileOnlyfaqat kompilyatsiyaannotatsiya
runtimeOnlyfaqat ish vaqtidrayver
testImplementationunit testJUnit
androidTestImplementationqurilma testiEspresso

Pastga bosing: tekshirish

Turlarni tekshirish

  1. core moduliga kutubxonani implementation bilan ulang.
  2. app dan uning sinfini ishlatib ko'ring: xato chiqadi.
  3. Turni api ga o'zgartiring va xato yo'qolganini ko'ring.

api dan implementation ga


api("com.google.code.gson:gson:2.10.1")
  

api dan implementation ga


implementation("com.google.code.gson:gson:2.10.1")
  

Turlar raqamlarda

0
ta asosiy tur
0
ta default: implementation
0
ta test turi

Eng ko'p ishlatiladigani: implementation.

Amaliy topshiriq 20 daqiqa

OsonTurni tanlang: JUnit, Coil, annotatsiya va drayver uchun tur tanlang.
Osonimplementation yoki api: core dagi Gson faqat core ichida ishlatiladi. Qaysi tur to'g'ri?
O'rtaRetrofit ni oching: core Retrofit ni app ga ochishi kerak. Yozing.
O'rtaTest kutubxonalari: JUnit va Espresso ni to'g'ri turlar bilan yozing.
QiyinIkki modul: core da Retrofit (api), Gson (implementation); app core ga bog'lansin.
QiyinXatoni tushuntiring: app Gson ni ishlatdi, core da u implementation. Nima bo'ladi, qanday tuzatasiz?
BonusruntimeOnly: Farqini yozing.

Dars xulosasi

implementation va api

Ko'rinish: faqat modul yoki barcha modullar.

compileOnly, runtimeOnly

Faqat kompilyatsiya yoki faqat ish vaqti.

Test turlari

testImplementation, androidTestImplementation.

Uyga vazifa: turlarni core va app modullarida qo'llash.

Keyingi dars: Keyingi mavzu

7-hafta: mavzu kartaga qarang

7-hafta · 19-dars