1- # Add project specific ProGuard rules here.
2- # You can control the set of applied configuration files using the
3- # proguardFiles setting in build.gradle.
4- #
5- # For more details, see
6- # http://developer.android.com/guide/developing/tools/proguard.html
7-
8- # If your project uses WebView with JS, uncomment the following
9- # and specify the fully qualified class name to the JavaScript interface
10- # class:
11- #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12- # public *;
13- #}
14-
15- # Uncomment this to preserve the line number information for
16- # debugging stack traces.
17- #-keepattributes SourceFile,LineNumberTable
18-
19- # If you keep the line number information, uncomment this to
20- # hide the original source file name.
21- #-renamesourcefileattribute SourceFile
22-
23- # Keep Firestore model classes
1+ ########################################
2+ # Preserve generic type information
3+ # (needed for Retrofit, Gson, Moshi, coroutines)
4+ ########################################
5+ -keepattributes Signature
6+ -keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
7+ -keepattributes *Annotation*
8+ -keepattributes Exceptions
9+ -keepattributes SourceFile,LineNumberTable
10+
11+ ########################################
12+ # --- Your app models ---
13+ ########################################
2414-keep class com.kharagedition.tibetankeyboard.util.User { *; }
2515-keep class com.kharagedition.tibetankeyboard.util.DeviceInfo { *; }
2616-keep class com.kharagedition.tibetankeyboard.util.** { *; }
17+ -keep class com.kharagedition.tibetankeyboard.model.** { *; }
18+
19+ ########################################
20+ # --- Retrofit / OkHttp ---
21+ ########################################
22+ -keep interface com.kharagedition.tibetankeyboard.network.** { *; }
23+ -keep class com.kharagedition.tibetankeyboard.network.** { *; }
24+
25+ # Keep all Retrofit classes and methods
26+ -keep class retrofit2.** { *; }
27+ -keepclassmembers class retrofit2.** { *; }
28+ -dontwarn retrofit2.**
29+
30+ # Keep service interface methods
31+ -keepclassmembers,allowshrinking,allowobfuscation interface * {
32+ @retrofit2.http.* <methods>;
33+ }
34+
35+ # Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items).
36+ -keep,allowobfuscation,allowshrinking interface retrofit2.Call
37+ -keep,allowobfuscation,allowshrinking class retrofit2.Response
38+
39+ # With R8 full mode generic signatures are stripped for classes that are not
40+ # kept. Suspend functions are wrapped in continuations where the type argument
41+ # is used.
42+ -keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
43+
44+ # OkHttp
45+ -keep class okhttp3.** { *; }
46+ -keep interface okhttp3.** { *; }
47+ -dontwarn okhttp3.**
48+ -dontwarn okio.**
49+
50+ ########################################
51+ # --- Gson / Moshi ---
52+ ########################################
53+ -keep class com.google.gson.** { *; }
54+ -dontwarn com.google.gson.**
55+
56+ # Keep generic signatures for Gson
57+ -keep class com.google.gson.reflect.TypeToken { *; }
58+ -keep class * extends com.google.gson.reflect.TypeToken
59+ -keep class com.google.gson.stream.** { *; }
60+
61+ # For Gson serialization
62+ -keepclassmembers,allowobfuscation class * {
63+ @com.google.gson.annotations.SerializedName <fields>;
64+ }
65+
66+ -keep class com.squareup.moshi.** { *; }
67+ -dontwarn com.squareup.moshi.**
68+
69+ ########################################
70+ # --- Firebase / Firestore ---
71+ ########################################
72+ -keep class com.google.firebase.** { *; }
73+ -dontwarn com.google.firebase.**
74+
75+ ########################################
76+ # --- Kotlin Coroutines ---
77+ ########################################
78+ -keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
79+ -keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
80+
81+ # Most of volatile fields are updated with AFU and should not be mangled
82+ -keepclassmembers class kotlinx.coroutines.** {
83+ volatile <fields>;
84+ }
85+
86+ -keep class kotlinx.coroutines.** { *; }
87+ -dontwarn kotlinx.coroutines.**
88+
89+ ########################################
90+ # --- Additional Kotlin rules ---
91+ ########################################
92+ -keep class kotlin.Metadata { *; }
93+ -keep class kotlin.reflect.** { *; }
94+ -dontwarn kotlin.reflect.**
95+
96+ ########################################
97+ # --- Reflection (important for Retrofit) ---
98+ ########################################
99+ -keepclassmembers class * {
100+ @retrofit2.http.* <methods>;
101+ }
102+
103+ # Keep Retrofit annotation classes and their methods
104+ -keep class retrofit2.http.** { *; }
105+ -keep @interface retrofit2.http.**
27106
28- # Keep Firebase Firestore
29- -keep class com.google.firebase.firestore.** { *; }
107+ ########################################
108+ # Optional: hide source filenames in logs
109+ # -renamesourcefileattribute SourceFile
110+ ########################################
0 commit comments