Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 13 / 14 Išleidimas ir šlifavimas ~50 min

Sukurk proguard-rules.pro — R8 „keep" taisyklės

Kodo stulpelyje — proguard-rules.pro. Įjungus R8, jis pašalina nenaudojamą kodą ir pervadina klases į a, b, c… Mažiau kodo, sunkiau apgręžti. Bet yra spąstai: kai kurios bibliotekos ieško klasių pagal pavadinimą (refleksija) — jei R8 jas pervadins, jos nebesuras. Tokias reikia išsaugoti (-keep).

Pica stack'ui reikia keturių grupių keep-taisyklių:

  • kotlinx.serialization — visi mūsų DTO (MenuItemDto, AuthRequest, OrderDto…). Serializatoriai generuojami ir randami refleksija.
  • Retrofit — servisų interfeisų metodai skaitomi refleksija.
  • Room — generuojamas kodas remiasi esybėmis/DAO.
  • Stripe — SDK vidinės klasės.

(Šis taisyklių rinkinys — standartinis šiam stack'ui; tikroji Pica proguard-rules.pro neturi, nes leidime R8 išjungtas.)

Patikrink. Surink leidimą ir paleisk jį tikrame įrenginyje:

./gradlew assembleRelease      # → app/build/outputs/apk/release/app-release.apk
# arba App Bundle Play parduotuvei:
./gradlew bundleRelease        # → app-release.aab

Programėlė turi veikti lygiai taip pat, kaip debug versija: meniu kraunasi, prisijungimas veikia, mokėjimas praeina.

Spąstai (tik release!). Įjungus R8 be keep-taisyklių, debug build'as veiks puikiai, bet release lūš vykdymo metu:

kotlinx.serialization.SerializationException:
Serializer for class 'MenuItemDto' is not found.

Nes R8 pervadino MenuItemDto ir jos generuotą serializatorių, o serialization ieško jų pagal originalų pavadinimą. Klaidos nematyti debug'e — todėl visada testuok pačią release versiją, ne tik debug.