From 36875ef9cd584b34346d1783774ce3433dc0157e Mon Sep 17 00:00:00 2001 From: Bernd Steckmeister Date: Wed, 7 Oct 2026 17:44:58 +0200 Subject: [PATCH] fix: Android-Backup und Geraeteumzug fuer App-Daten abschalten (Aussperr-Schutz) + Gradle 8.14.3 Ohne allowBackup=false/dataExtractionRules zog die SQLCipher-Datenbank beim Handywechsel ohne ihren Keystore-Schluessel mit - AppDatabase bricht dann bewusst ab, die App waere unbenutzbar. Ausserdem lag der Push-Zugangsschluessel (SharedPreferences) im Cloud-Backup. Neues Geraet = neu anmelden + Schluessel per Wiederherstellungsschluessel (Matrix-Weg). Gradle-Wrapper auf 8.14.3 (Flutter kuendigte Ende der 8.13-Unterstuetzung an). Co-Authored-By: Claude Opus 5.5 --- PROGRESS.md | 5 ++++ ROADMAP.md | 9 ++++++- android/app/src/main/AndroidManifest.xml | 7 ++++- .../main/res/xml/data_extraction_rules.xml | 27 +++++++++++++++++++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 android/app/src/main/res/xml/data_extraction_rules.xml diff --git a/PROGRESS.md b/PROGRESS.md index d412eaa..4948b06 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -49,6 +49,11 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format: stets vor Abschluss der Neuanmeldung – Risiko war klein. E2E-Live-Test nutzt jetzt denselben App-Baustein. +- **Android-Backup aus** (allowBackup=false, fullBackupContent=false, + dataExtractionRules schließt Cloud-Backup UND Geräteumzug aus): verhindert + den Aussperr-Fall „verschlüsselte DB ohne Schlüssel auf neuem Handy“ und + den Push-Token im Cloud-Backup. Gradle 8.13 → 8.14.3. + **Offen/Nächster Schritt:** Bernd testet 0.1.37 auf dem Handy (Push mit mehreren Nachrichten + Bild, „Gelesen“, Statusleiste, Vollansicht-Gesten, Sprechblasen, Schriftgröße). Danach ROADMAP: SDK-Logout-Wettlauf im diff --git a/ROADMAP.md b/ROADMAP.md index 5370f4c..def0a6f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -160,6 +160,13 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert. Gitea-API (`/api/v1/repos/steggi/pyramid/releases`). Repo privat = Utas App findet keine Updates mehr (und ein Fix ließe sich nicht mehr per Update verteilen – Henne-Ei). Erst Updater-Strategie klären, dann Sichtbarkeit ändern. +- [x] **Android-Backup/Geräteumzug abgeschaltet** (2026-10-07): ohne + `allowBackup=false` + `dataExtractionRules` wäre die SQLCipher-DB beim + Handywechsel ohne ihren Keystore-Schlüssel mitgezogen → App startet + nicht (Aussperr-Fall), und der Push-Zugangsschlüssel aus den + SharedPreferences läge im Cloud-Backup. Neues Gerät = neu anmelden + + Schlüssel per Wiederherstellungsschlüssel. Im APK geprüft (aapt2, + `dumpsys package`: kein ALLOW_BACKUP mehr). - [ ] Härtetest dokumentieren: Login → Nachrichten → Logout → Login neu → alles noch lesbar (gehört zum ausstehenden PC-Praxistest der beiden Bugfixes oben; kompletter Ablauf inkl. aller aufgelaufenen UNGETESTET-Punkte steht @@ -296,7 +303,7 @@ lassen, ohne dass andere Module angefasst werden müssen. (libwebrtc #142) ist auch in 1.6.2+hotfix.4 NICHT enthalten (Changelog geprüft 2026-10-07) → Dummy-PeerConnection-Workaround bleibt nötig. - - Android-Build: Gradle 8.13 → ≥ 8.14 (Flutter-Warnung) und Umstieg auf + - Android-Build: Gradle 8.13 → 8.14.3 ERLEDIGT (2026-10-07). Offen: Umstieg auf „Built-in Kotlin“ (Flutter kündigt Build-Fehler für das Kotlin-Plugin an; betrifft auch Plugins wie flutter_webrtc/livekit_client). - `flutter_markdown` ist eingestellt (pub: „replaced by diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a70299e..eb6d204 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,10 +17,15 @@ + + android:icon="@mipmap/ic_launcher" + android:allowBackup="false" + android:fullBackupContent="false" + android:dataExtractionRules="@xml/data_extraction_rules"> + + + + + + + + + + + + + + + + + diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 02767eb..74b269f 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip