# ============================================================================ # Mitbringsl ProGuard / R8 rules # ============================================================================ # --- Kotlinx Serialization --- # R8 strips the serializer companions resolved via reflection unless kept. -keepattributes *Annotation*, InnerClasses -dontnote kotlinx.serialization.** # Keep the @Serializable companions and their serializers. -if @kotlinx.serialization.Serializable class ** -keepclassmembers class <1> { static <1>$Companion Companion; } -if @kotlinx.serialization.Serializable class ** { static **$* *; } -keepclassmembers class <2>$<3> { kotlinx.serialization.KSerializer serializer(...); } -keep,includedescriptorclasses class com.example.mitbringsl.**$$serializer { *; } -keepclassmembers class com.example.mitbringsl.** { *** Companion; } # --- Retrofit --- # Retrofit uses reflection to parse annotations and build service interfaces. -keepattributes Signature, Exceptions -keep,allowobfuscation,allowshrinking interface retrofit2.Call -keep,allowobfuscation,allowshrinking class retrofit2.Response -keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation # Do not strip method/parameter annotations on service interfaces. -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } -if interface * { @retrofit2.http.* ; } -keep,allowobfuscation interface <1> # --- OkHttp --- -dontwarn okhttp3.** -dontwarn okio.** -dontwarn org.conscrypt.** # --- Keep all DTO/model classes used by serialization (paranoia / safety) --- -keep class com.example.mitbringsl.data.remote.dto.** { *; } # --- Room (KSP-generated code should be safe, but keep entities) --- -keep class com.example.mitbringsl.data.local.entity.** { *; }