Files
Kordant/android/app/proguard-rules.pro

186 lines
6.7 KiB
Prolog

# ============================================================
# Kordant ProGuard / R8 Rules
# ============================================================
# Keep line numbers for crash reporting (Crashlytics)
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
# ============================================================
# Compose
# ============================================================
-keep class androidx.compose.** { *; }
-keepclassmembers class **$Companion {
<fields>;
}
-dontwarn androidx.compose.**
# ============================================================
# Kotlin
# ============================================================
-keepclassmembers class **.R$* {
public static <fields>;
}
-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 {
<init>(kotlin.String);
}
-keepclassmembers class kotlinx.coroutines.MainCoroutineDispatcher {
}
-keepclassmembers class kotlinx.coroutines.Dispatchers {}
-keepclassmembers class kotlinx.coroutines.Dispatchers$Main {}
-keepclasseswithmembers class * {
@org.jetbrains.annotations.NotNull <methods>;
}
# ============================================================
# 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.* <methods>;
}
-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 {
<init>(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 {
<init>(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 {
<init>(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.**