# Mantener todas las anotaciones
-keepattributes *Annotation*

# Mantener nombres de clases utilizados por reflection
-keepnames class * {
    java.lang.Class<?>[] getDeclaredClasses();
    java.lang.reflect.Method[] getDeclaredMethods();
    java.lang.reflect.Constructor[] getDeclaredConstructors();
}

# Mantener los métodos de Gson utilizados para la serialización/deserialización
-keepclassmembers class * {
    public static final java.lang.String CREATOR;
}

# Mantener métodos y clases utilizados por Retrofit
-keep class retrofit2.** { *; }
-dontwarn retrofit2.**

# Ofuscar todas las clases, excepto las clases públicas
-keep public class * {
    public protected *;
}

# Mantener las clases utilizadas por Room
-keep class androidx.room.** { *; }
-dontwarn androidx.room.**
-keep class androidx.sqlite.db.** { *; }
-dontwarn androidx.sqlite.db.**

# Anti-tampering checks
-assumenosideeffects class android.os.Debug {
    public static boolean isDebuggerConnected();
    public static boolean waitingForDebugger();
}

# Cifrado
-keep class sun.misc.Unsafe { *; }
-dontwarn sun.misc.**

# Mantener las clases utilizadas por otras bibliotecas
-keep class com.google.gson.** { *; }
-dontwarn com.google.gson.**
