# Keep `Companion` object fields of serializable classes. # This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. -if @kotlinx.serialization.Serializable class ** -keepclassmembers class <1> { static <1>$Companion Companion; } # Keep `serializer()` on companion objects (both default and named) of serializable classes. -if @kotlinx.serialization.Serializable class ** { static **$* *; } -keepclassmembers class <2>$<3> { kotlinx.serialization.KSerializer serializer(...); } # Keep `INSTANCE.serializer()` of serializable objects. -if @kotlinx.serialization.Serializable class ** { public static ** INSTANCE; } -keepclassmembers class <1> { public static <1> INSTANCE; kotlinx.serialization.KSerializer serializer(...); } # @Serializable and @Polymorphic are used at runtime for polymorphic serialization. -keepattributes RuntimeVisibleAnnotations,AnnotationDefault # Serializer for classes with named companion objects are retrieved using `getDeclaredClasses`. # If you have any, uncomment and replace classes with those containing named companion objects. -keepattributes InnerClasses # Needed for `getDeclaredClasses`. -keepnames class <1>$$serializer { # -keepnames suffices; class is kept when serializer() is kept. static <1>$$serializer INSTANCE; } # Keep fields for APK verification, used through reflection -keepclassmembers public class com.android.apksig.** { public *; } # Keep class names of patching steps since they're used via reflection -keepnames class com.meowarex.rlmobile.patcher.steps.** # Room/WorkManager: generated *_Impl classes are reflectively instantiated via # their no-arg constructor (Class#getDeclaredConstructor()). proguard-android-optimize.txt # strips no-arg ctors otherwise, which crashes WorkManager auto-init at startup with # NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl. []. -keep class * extends androidx.room.RoomDatabase { (); } -keep class **_Impl { (); } # Repackage classes into the top-level. -repackageclasses # Amount of optimization iterations, taken from an SO post -optimizationpasses 5 -mergeinterfacesaggressively # Broaden access modifiers to increase results during optimization -allowaccessmodification # Suppress missing class warnings -dontwarn org.slf4j.impl.StaticLoggerBinder # Keeps all class and field names for debugging -keepnames class ** { *; } # Preserve the line number information for debugging stack traces. -keepattributes SourceFile,LineNumberTable