# ============================================================ # Kordant ProGuard / R8 Rules # ============================================================ # Keep line numbers for crash reporting (Crashlytics) -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile # ============================================================ # Compose # ============================================================ -keep class androidx.compose.** { *; } -keepclassmembers class **$Companion { ; } -dontwarn androidx.compose.** # ============================================================ # Kotlin # ============================================================ -keepclassmembers class **.R$* { public static ; } -keepclassmembers class * implements androidx.compose.runtime.InternalCompositeException$MessageCollector { public void reportException(kotlin.Exception, androidx.compose.runtime.ComposableCancellationBehaviour); } -keepclassmembers class kotlin.Metadata { } # Keep Coroutines -keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {} -keepnames class kotlinx.coroutines.CoroutineExceptionHandler {} -keepclassmembers class kotlinx.coroutines.CoroutineExceptionHandler { (kotlin.String); } -keepclassmembers class kotlinx.coroutines.MainCoroutineDispatcher { } -keepclassmembers class kotlinx.coroutines.Dispatchers {} -keepclassmembers class kotlinx.coroutines.Dispatchers$Main {} -keepclasseswithmembers class * { @org.jetbrains.annotations.NotNull ; } # ============================================================ # Kotlinx Serialization # ============================================================ -keep class * implements kotlinx.serialization.KSerializer -keepclassmembers class * { @kotlinx.serialization.Serializable *; } -keepclassmembers enum * { public static ** values(); public static ** valueOf(java.lang.String); } -dontwarn kotlinx.serialization.internal.** -dontwarn kotlin.Unit # ============================================================ # Retrofit # ============================================================ -keepattributes Signature -keepattributes *Annotation* -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } -dontwarn retrofit2.-* -dontwarn okhttp3.** # ============================================================ # OkHttp # ============================================================ -dontwarn java.lang.ClassLoader$ -dontwarn javax.naming.** -dontwarn org.apache.log4j.** -dontwarn org.apache.commons.logging.** -dontwarn okio.IOException -dontwarn kotlin.Experimental # ============================================================ # Firebase / Crashlytics # ============================================================ -keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } -keep public class com.google.firebase.** { public protected *; } -keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * { } -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } # ============================================================ # EncryptedSharedPreferences / Security Crypto # ============================================================ -keep class androidx.security.crypto.** { *; } -keepclassmembers class androidx.security.crypto.** { *; } # ============================================================ # DataStore # ============================================================ -keep class androidx.datastore.** { *; } -keepclassmembers class androidx.datastore.** { *; } # ============================================================ # WorkManager # ============================================================ -keep class androidx.work.** { *; } -keepclassmembers class androidx.work.** { *; } -keep class * extends androidx.work.Worker { (android.content.Context, androidx.work.WorkerParameters); } -keepnames class * extends androidx.work.Worker # ============================================================ # Google Sign-In # ============================================================ -keep class com.google.android.gms.auth.** { *; } -keep class com.google.android.gms.common.** { *; } -keep class com.google.android.gms.tasks.** { *; } # ============================================================ # Coil Image Loading # ============================================================ -keep class coil.** { *; } -dontwarn coil.** # ============================================================ # Lottie # ============================================================ -keep class com.airbnb.lottie.** { *; } -keepclassmembers class com.airbnb.lottie.** { *; } # ============================================================ # App-Specific Keeps # ============================================================ # Keep data models for serialization -keep class com.kordant.android.data.model.** { *; } -keep class com.kordant.android.data.remote.TRPCResponse { *; } -keep class com.kordant.android.data.remote.TRPCResult { *; } -keep class com.kordant.android.data.remote.TRPCErrorResponse { *; } -keep class com.kordant.android.data.remote.TRPCError { *; } # Keep sync classes -keep class com.kordant.android.data.sync.OfflineWorker { (android.content.Context, androidx.work.WorkerParameters); } # Keep navigation -keep class com.kordant.android.navigation.** { *; } # Keep services (including CallScreeningService) -keep class com.kordant.android.service.** { *; } # Keep SQLite spam database -keep class com.kordant.android.data.local.spam.** { *; } -keep class * extends android.database.sqlite.SQLiteOpenHelper { (android.content.Context, java.lang.String, android.database.CursorFactory, int); } # Keep call screening viewmodel and screens -keep class com.kordant.android.viewmodel.CallScreeningViewModel { *; } -keep class com.kordant.android.ui.screens.services.CallScreeningSettingsScreen { *; } # Keep CallScreeningRepository -keep class com.kordant.android.data.repository.CallScreeningRepository { *; } -keep class com.kordant.android.util.CallScreeningPermissionManager { *; } # Keep widget provider -keep class com.kordant.android.widget.** { *; } # Keep content descriptors for TalkBack -keepattributes *Annotation* # ============================================================ # Play Integrity API # ============================================================ -keep class com.google.android.play.integrity.** { *; } -dontwarn com.google.android.play.integrity.**