# jUPnP uses reflection heavily for UPnP actions / arguments / DIDL-Lite.
-keep class org.jupnp.** { *; }
-dontwarn org.jupnp.**
# Jetty 9.4 (jUPnP's transport) touches servlet + NIO classes reflectively.
-keep class org.eclipse.jetty.** { *; }
-dontwarn org.eclipse.jetty.**
-dontwarn javax.servlet.**
-dontwarn javax.naming.**
-dontwarn org.slf4j.**
# SLF4J 2.x discovers its logging provider via java.util.ServiceLoader
# (META-INF/services/org.slf4j.spi.SLF4JServiceProvider). R8 doesn't trace
# ServiceLoader references and will prune the JDK14 provider classes as
# "unused", leaving SLF4J unable to find a binding at runtime — symptom
# is "No SLF4J providers were found. Defaulting to no-operation (NOP)
# logger implementation" in logcat. Without a working SLF4J binding,
# jUPnP's discovery / SSDP / control-point logs all go to /dev/null,
# which makes UPnP failures undebuggable.
-keep class org.slf4j.jul.** { *; }
-keep class org.slf4j.spi.SLF4JServiceProvider { *; }
-keepnames class org.slf4j.** { *; }
# Kotlinx serialization
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt
-keep,includedescriptorclasses class dev.stave.**$$serializer { *; }
-keepclassmembers class dev.stave.** { *** Companion; }
-keepclasseswithmembers class dev.stave.** {
kotlinx.serialization.KSerializer serializer(...);
}
# Media3
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
# ── Raw Cast client (observer / follower mode) ──────────────────────
# Hand-rolled Cast v2 wire codec + TLS with permissive trust for the
# Chromecast's self-signed cert, all on raw SSLSocket. First minified
# release coincided with TV follow failing 100% while debug worked;
# no confirmed R8 victim yet (no reflection in the package), so keep
# the whole package as a conservative shield until a release logcat
# trace (tag: EarhornCast) names the exact failure. Size cost: a few KB.
-keep class dev.stave.cast.raw.** { *; }
-dontwarn dev.stave.cast.raw.**