proguard-rules.pro
Each line, with the release that last changed it.
| 0.5.0 | 1 | # jUPnP uses reflection heavily for UPnP actions / arguments / DIDL-Lite. |
| 2 | -keep class org.jupnp.** { *; } | |
| 3 | -dontwarn org.jupnp.** | |
| 4 | # Jetty 9.4 (jUPnP's transport) touches servlet + NIO classes reflectively. | |
| 5 | -keep class org.eclipse.jetty.** { *; } | |
| 6 | -dontwarn org.eclipse.jetty.** | |
| 7 | -dontwarn javax.servlet.** | |
| 8 | -dontwarn javax.naming.** | |
| 9 | -dontwarn org.slf4j.** | |
| 10 | ||
| 11 | # SLF4J 2.x discovers its logging provider via java.util.ServiceLoader | |
| 12 | # (META-INF/services/org.slf4j.spi.SLF4JServiceProvider). R8 doesn't trace | |
| 13 | # ServiceLoader references and will prune the JDK14 provider classes as | |
| 14 | # "unused", leaving SLF4J unable to find a binding at runtime — symptom | |
| 15 | # is "No SLF4J providers were found. Defaulting to no-operation (NOP) | |
| 16 | # logger implementation" in logcat. Without a working SLF4J binding, | |
| 17 | # jUPnP's discovery / SSDP / control-point logs all go to /dev/null, | |
| 18 | # which makes UPnP failures undebuggable. | |
| 19 | -keep class org.slf4j.jul.** { *; } | |
| 20 | -keep class org.slf4j.spi.SLF4JServiceProvider { *; } | |
| 21 | -keepnames class org.slf4j.** { *; } | |
| 22 | ||
| 23 | # Kotlinx serialization | |
| 24 | -keepattributes *Annotation*, InnerClasses | |
| 25 | -dontnote kotlinx.serialization.AnnotationsKt | |
| 26 | -keep,includedescriptorclasses class dev.stave.**$$serializer { *; } | |
| 27 | -keepclassmembers class dev.stave.** { *** Companion; } | |
| 28 | -keepclasseswithmembers class dev.stave.** { | |
| 29 | kotlinx.serialization.KSerializer serializer(...); | |
| 30 | } | |
| 31 | ||
| 32 | # Media3 | |
| 33 | -keep class androidx.media3.** { *; } | |
| 34 | -dontwarn androidx.media3.** | |
| 35 | ||
| 36 | # ── Raw Cast client (observer / follower mode) ────────────────────── | |
| 37 | # Hand-rolled Cast v2 wire codec + TLS with permissive trust for the | |
| 38 | # Chromecast's self-signed cert, all on raw SSLSocket. First minified | |
| 39 | # release coincided with TV follow failing 100% while debug worked; | |
| 40 | # no confirmed R8 victim yet (no reflection in the package), so keep | |
| 41 | # the whole package as a conservative shield until a release logcat | |
| 42 | # trace (tag: EarhornCast) names the exact failure. Size cost: a few KB. | |
| 43 | -keep class dev.stave.cast.raw.** { *; } | |
| 44 | -dontwarn dev.stave.cast.raw.** |


