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
|
stets vor Abschluss der Neuanmeldung – Risiko war klein. E2E-Live-Test nutzt
|
||||||
jetzt denselben App-Baustein.
|
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
|
**Offen/Nächster Schritt:** Bernd testet 0.1.37 auf dem Handy (Push mit
|
||||||
mehreren Nachrichten + Bild, „Gelesen“, Statusleiste, Vollansicht-Gesten,
|
mehreren Nachrichten + Bild, „Gelesen“, Statusleiste, Vollansicht-Gesten,
|
||||||
Sprechblasen, Schriftgröße). Danach ROADMAP: SDK-Logout-Wettlauf im
|
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
|
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
|
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.
|
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
|
- [ ] Härtetest dokumentieren: Login → Nachrichten → Logout → Login neu → alles noch lesbar
|
||||||
(gehört zum ausstehenden PC-Praxistest der beiden Bugfixes oben;
|
(gehört zum ausstehenden PC-Praxistest der beiden Bugfixes oben;
|
||||||
kompletter Ablauf inkl. aller aufgelaufenen UNGETESTET-Punkte steht
|
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
|
(libwebrtc #142) ist auch in 1.6.2+hotfix.4 NICHT enthalten
|
||||||
(Changelog geprüft 2026-10-07) → Dummy-PeerConnection-Workaround
|
(Changelog geprüft 2026-10-07) → Dummy-PeerConnection-Workaround
|
||||||
bleibt nötig.
|
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;
|
„Built-in Kotlin“ (Flutter kündigt Build-Fehler für das Kotlin-Plugin an;
|
||||||
betrifft auch Plugins wie flutter_webrtc/livekit_client).
|
betrifft auch Plugins wie flutter_webrtc/livekit_client).
|
||||||
- `flutter_markdown` ist eingestellt (pub: „replaced by
|
- `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.RECEIVE_BOOT_COMPLETED"/>
|
||||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
<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
|
<application
|
||||||
android:label="Pyramid"
|
android:label="Pyramid"
|
||||||
android:name="${applicationName}"
|
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
|
<service
|
||||||
android:name="com.cloudwebrtc.webrtc.FlutterForegroundService"
|
android:name="com.cloudwebrtc.webrtc.FlutterForegroundService"
|
||||||
android:enabled="true"
|
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
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
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