|
66 | 66 | # 🔧 v1.8.2: Granulare Regeln statt breiter Wildcard |
67 | 67 | # Ersetzt die v1.8.1-Notlösung (-keep class dev.dettmer.simplenotes.** { *; }) |
68 | 68 | # die JEGLICHES Tree-Shaking verhinderte → APK > 5MB. |
| 69 | +# 🔧 v1.10.0 Audit: BackupData-Fix, tote data/-Regel entfernt, ActionCallback robuster |
69 | 70 |
|
70 | 71 | # 1) DATA MODELS — Gson braucht Feldnamen + Konstruktoren |
71 | 72 | # NoteRaw ist Note$Companion$NoteRaw (Companion-verschachtelt!) |
72 | 73 | -keep class dev.dettmer.simplenotes.models.** { *; } |
73 | | --keep class dev.dettmer.simplenotes.data.** { *; } |
74 | 74 |
|
75 | | -# 2) WORKMANAGER — instanziiert SyncWorker via Reflection |
| 75 | +# 2) BACKUP — BackupData.notes hat kein @SerializedName; R8-Obfuscation würde |
| 76 | +# den Feldnamen umbenennen → Gson findet JSON-Key "notes" nicht → leere |
| 77 | +# Notizen-Liste beim Import (stiller Datenverlust im Release-Build!) |
| 78 | +-keep class dev.dettmer.simplenotes.backup.BackupData { *; } |
| 79 | + |
| 80 | +# 3) WORKMANAGER — instanziiert SyncWorker via Reflection |
76 | 81 | -keep class dev.dettmer.simplenotes.sync.SyncWorker { *; } |
77 | 82 |
|
78 | | -# 3) BROADCAST RECEIVERS — via AndroidManifest registriert |
79 | | --keep class dev.dettmer.simplenotes.widget.NoteWidgetReceiver { *; } |
| 83 | +# 4) BROADCAST RECEIVERS — via AndroidManifest registriert |
80 | 84 | -keep class dev.dettmer.simplenotes.** extends android.content.BroadcastReceiver { *; } |
81 | 85 |
|
82 | | -# 4) ACTIVITIES & APPLICATION — Android-Framework instanziiert via Reflection |
| 86 | +# 5) ACTIVITIES & APPLICATION — Android-Framework instanziiert via Reflection |
83 | 87 | -keep class dev.dettmer.simplenotes.SimpleNotesApplication { *; } |
84 | 88 | -keep class dev.dettmer.simplenotes.** extends android.app.Activity { *; } |
85 | 89 | -keep class dev.dettmer.simplenotes.** extends androidx.fragment.app.Fragment { *; } |
|
94 | 98 |
|
95 | 99 | # Glance Widget ActionCallbacks (instanziiert via Reflection durch actionRunCallback<T>()) |
96 | 100 | # Ohne diese Rule findet R8 die Klassen nicht zur Laufzeit → Widget-Crash |
| 101 | +# Interface-Regel ist robuster als *Action-Pattern (erfasst alle zukünftigen Callbacks) |
97 | 102 | -keep class dev.dettmer.simplenotes.widget.*Action { *; } |
98 | | --keep class dev.dettmer.simplenotes.widget.*Receiver { *; } |
| 103 | +-keep class * implements androidx.glance.appwidget.action.ActionCallback { *; } |
99 | 104 |
|
100 | 105 | # Compose Text Layout: Verhindert dass R8 onTextLayout-Callbacks |
101 | 106 | # als Side-Effect-Free optimiert (behebt Gradient-Regression) |
|
0 commit comments