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 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
e90b954348
commit
36875ef9cd
@@ -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
|
||||
|
||||
+8
-1
@@ -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
|
||||
|
||||
@@ -17,10 +17,15 @@
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||
|
||||
<!-- Kein Backup/Umzug der App-Daten: siehe res/xml/data_extraction_rules.xml
|
||||
(verschlüsselte DB ohne Keystore-Schlüssel = App startet nicht). -->
|
||||
<application
|
||||
android:label="Pyramid"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:allowBackup="false"
|
||||
android:fullBackupContent="false"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules">
|
||||
<service
|
||||
android:name="com.cloudwebrtc.webrtc.FlutterForegroundService"
|
||||
android:enabled="true"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Kein Cloud-Backup und keine Gerät-zu-Gerät-Übertragung der App-Daten
|
||||
(Android 12+). Grund: Die lokale Datenbank ist mit SQLCipher verschlüsselt,
|
||||
ihr Schlüssel liegt im Android-Keystore und zieht NICHT mit um – eine
|
||||
übertragene Datenbank ließe sich auf dem neuen Gerät nicht öffnen
|
||||
(AppDatabase bricht dann bewusst ab, statt Daten zu überschreiben).
|
||||
Außerdem enthalten die SharedPreferences den Zugangsschlüssel für den
|
||||
Push-Dienst. Matrix-Weg auf neuem Gerät: neu anmelden + Schlüssel mit dem
|
||||
Wiederherstellungsschlüssel aus dem Server-Backup holen.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<exclude domain="root" path="." />
|
||||
<exclude domain="file" path="." />
|
||||
<exclude domain="database" path="." />
|
||||
<exclude domain="sharedpref" path="." />
|
||||
<exclude domain="external" path="." />
|
||||
</cloud-backup>
|
||||
<device-transfer>
|
||||
<exclude domain="root" path="." />
|
||||
<exclude domain="file" path="." />
|
||||
<exclude domain="database" path="." />
|
||||
<exclude domain="sharedpref" path="." />
|
||||
<exclude domain="external" path="." />
|
||||
</device-transfer>
|
||||
</data-extraction-rules>
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user