# proguard file largely copied from Tusky's # GENERAL OPTIONS (inspired from AOSP's proguard-android-optimize.txt) # turn on all optimizations except those that are known to cause problems on Android -optimizations !code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 6 -allowaccessmodification # Don't obfuscate because it makes traces useless -dontobfuscate -dontusemixedcaseclassnames -keepattributes *Annotation* # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native ; } # keep ViewModel constructors to make ViewModelFactories work -keepclassmembers public class * extends androidx.lifecycle.ViewModel { public (...); } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements android.os.Parcelable { public static final ** CREATOR; } # APP SPECIFIC OPTIONS # keep members of our model classes, they are used in json de/serialization -keepclassmembers class org.pixeldroid.app.utils.api.objects.* { *; } -keep public enum org.pixeldroid.app.utils.api.objects.*$** { **[] $VALUES; public *; } -keepclassmembers class org.pixeldroid.app.settings.licenseObjects.* { *; } -keep public enum org.pixeldroid.app.settings.licenseObjects.*$** { **[] $VALUES; public *; } # preserve line numbers for crash reporting -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile # remove all logging from production apk -assumenosideeffects class android.util.Log { public static *** getStackTraceString(...); public static *** d(...); public static *** e(...); public static *** println(...); public static *** w(...); public static *** v(...); public static *** i(...); } -assumenosideeffects class java.lang.String { public static java.lang.String format(...); } # remove some kotlin overhead -assumenosideeffects class kotlin.jvm.internal.Intrinsics { static void checkNotNull(java.lang.Object); static void checkNotNull(java.lang.Object, java.lang.String); static void checkParameterIsNotNull(java.lang.Object, java.lang.String); static void checkParameterIsNotNull(java.lang.Object, java.lang.String); static void checkNotNullParameter(java.lang.Object, java.lang.String); static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String); static void checkNotNullExpressionValue(java.lang.Object, java.lang.String); static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String); static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String, java.lang.String); static void throwUninitializedPropertyAccessException(java.lang.String); } -keep public class * extends com.bumptech.glide.module.AppGlideModule -keep class com.bumptech.glide.GeneratedAppGlideModuleImpl -dontwarn org.bouncycastle.** -dontwarn org.conscrypt.** -dontwarn org.openjsse.javax.net.ssl.** -dontwarn org.openjsse.net.ssl.** -dontwarn org.checkerframework.checker.nullness.qual.EnsuresNonNull -dontwarn org.checkerframework.checker.nullness.qual.RequiresNonNull ##---------------Begin: proguard configuration for Gson ---------- # Gson uses generic type information stored in a class file when working with fields. Proguard # removes such information by default, so configure it to keep all of it. -keepattributes Signature # For using GSON @Expose annotation -keepattributes *Annotation* # Gson specific classes -dontwarn sun.misc.** #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { ; } # Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory, # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) -keep class * extends com.google.gson.TypeAdapter -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer -keep class com.google.gson.internal.LinkedTreeMap { *; } # Prevent R8 from leaving Data object members always null -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName ; } # Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher. -keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken -keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken ##---------------End: proguard configuration for Gson ---------- ##---------------Begin: proguard configuration for Retrofit ---------- # Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and # EnclosingMethod is required to use InnerClasses. -keepattributes Signature, InnerClasses, EnclosingMethod # Retrofit does reflection on method and parameter annotations. -keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations # Keep annotation default values (e.g., retrofit2.http.Field.encoded). -keepattributes AnnotationDefault # Retain service method parameters when optimizing. -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } # Ignore annotation used for build tooling. -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement # Ignore JSR 305 annotations for embedding nullability information. -dontwarn javax.annotation.** # Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. -dontwarn kotlin.Unit # Top-level functions that can only be used by Kotlin. -dontwarn retrofit2.KotlinExtensions -dontwarn retrofit2.KotlinExtensions$* # With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy # and replaces all potential values with null. Explicitly keeping the interfaces prevents this. -if interface * { @retrofit2.http.* ; } -keep,allowobfuscation interface <1> # Keep inherited services. -if interface * { @retrofit2.http.* ; } -keep,allowobfuscation interface * extends <1> # Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items). -keep,allowobfuscation,allowshrinking interface retrofit2.Call -keep,allowobfuscation,allowshrinking class retrofit2.Response # With R8 full mode generic signatures are stripped for classes that are not # kept. Suspend functions are wrapped in continuations where the type argument # is used. -keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation ##---------------End: proguard configuration for Retrofit ---------- -keep,allowobfuscation,allowshrinking class io.reactivex.rxjava3.core.Observable