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
MenuItemDtoir 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.