test: SQLCipher auf Android-Emulator verifiziert (Neuanlage verschluesselt, Klartext-Migration, Neustart ohne Re-Migration)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+53
@@ -13,6 +13,59 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-06 – SQLCipher auf ANDROID getestet (Emulator API 36): Neuanlage, Migration und Neustart grün
|
||||
|
||||
**Erledigt:** Der größte offene Teil von Testplan Punkt 4
|
||||
(`docs/SQLCIPHER_MIGRATION.md`) ist jetzt real auf Android belegt – kein
|
||||
Gerät angeschlossen, aber der vorhandene Emulator (Medium Phone API 36.1,
|
||||
x86_64, MIT Play Services) reicht für die DB-Schicht:
|
||||
|
||||
- **Szenario A – frische Installation:** Debug-APK installiert, App
|
||||
gestartet → `pyramid.sqlite` wird von Anfang an VERSCHLÜSSELT angelegt
|
||||
(Header = Zufallsbytes statt „SQLite format 3", per `run-as`/`od`
|
||||
verifiziert); auth_log ohne Cipher-Fallback oder Fehler.
|
||||
- **Szenario B – Update-Szenario (Utas Fall):** `pm clear` (auch der
|
||||
Keystore-Eintrag weg) + synthetische Klartext-DB (2 Tabellen, 550
|
||||
Zeilen) VOR dem ersten Start in `files/` gelegt → beim Start lief die
|
||||
echte Migration: auth_log „Klartext-DB erfolgreich nach SQLCipher
|
||||
migriert (2 Tabellen verifiziert)", `.premigration`-Backup liegt da,
|
||||
DB danach verschlüsselt, App lief normal weiter (Login-Screen,
|
||||
Screenshot geprüft). **Bewusst NICHT mit Bernds echter DB getestet** –
|
||||
die enthält seine Session/Olm-Account, ein Duplikat auf einem zweiten
|
||||
„Gerät" würde den E2EE-State korrumpieren.
|
||||
- **Szenario C – Neustart:** force-stop + Relaunch → verschlüsselte DB
|
||||
öffnet mit dem Schlüssel aus dem Android-Keystore, KEINE zweite
|
||||
Migration, kein Fehler. Damit sind `openCipherOnAndroid`,
|
||||
`sqlcipher_export` und flutter_secure_storage auf Android
|
||||
(Haupt-Isolate) praktisch belegt.
|
||||
- Doku nachgezogen: Status-Kopf `docs/SQLCIPHER_MIGRATION.md`,
|
||||
ROADMAP-M1-Vermerk. Emulator danach heruntergefahren. Nebenbei:
|
||||
`android/gradle.properties` bekam beim APK-Build automatisch zwei
|
||||
Flutter-Migrator-Flags (`builtInKotlin=false`, `newDsl=false` – pinnt
|
||||
bestehendes Verhalten), mit committet.
|
||||
|
||||
**UNGETESTET bleibt (ROADMAP-Punkt weiter NICHT abgehakt):** echtes
|
||||
ARM-Gerät, Migration einer ECHTEN eingeloggten Session auf Android und
|
||||
der Push-Test (FCM-Background-Isolate liest verschlüsselte DB,
|
||||
secure_storage im Background-Isolate) – braucht ein Testgerät mit
|
||||
eingeloggtem Account (Login-Daten hat nur Bernd). Erst danach Release
|
||||
und Utas Gerät.
|
||||
|
||||
**Offen/Nächster Schritt:** auth_log-Check des weiterlaufenden
|
||||
Windows-Beobachtungslaufs (Einträge seit 2026-07-06 18:19). Für Bernd
|
||||
unverändert: PC_TESTPLAN 1 (Rest) + 2–8 durchklicken; fürs
|
||||
SQLCipher-Finale ein echtes Android-Gerät anstecken (Debug-Build reicht,
|
||||
Ablauf wie hier im Emulator).
|
||||
|
||||
**Stolperfallen:** (1) Ein Dart-Skript außerhalb des Repos kann
|
||||
`package:`-Imports nicht auflösen – Hilfsskripte kurz ins Repo legen
|
||||
(`tool/`, untracked) und nach dem Lauf löschen. (2) Für Datei-Zugriff im
|
||||
App-Sandbox-Verzeichnis braucht es eine DEBUG-APK (`run-as` geht nur bei
|
||||
debuggable); das Emulator-Image hat kein `sqlite3`-Binary – Test-DBs
|
||||
also am PC bauen und pushen.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-06 – auth_log-Check 17:43-Fenster: echter ~7-min-Netzausfall OHNE Logout überstanden (stärkster Positiv-Befund bisher)
|
||||
|
||||
**Erledigt:** Vierte PC-Session, zuerst der Pflicht-Check der Vorsession
|
||||
|
||||
+7
-3
@@ -48,9 +48,13 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
|
||||
Backup/Verifikation/atomarem Tausch, Push-Isolate-Marker). Bernds echte
|
||||
Windows-DB wurde erfolgreich migriert (PROGRESS.md 2026-07-06), Tests in
|
||||
`test/app_database_test.dart` fahren die Migration mit echtem SQLCipher.
|
||||
**Bleibt offen, weil Android UNGETESTET ist** (Migration auf Gerät,
|
||||
Push-Isolate liest verschlüsselte DB, secure_storage im
|
||||
Background-Isolate) – Testplan Punkt 4 in `docs/SQLCIPHER_MIGRATION.md`;
|
||||
**Nachtrag 2026-07-06 (vierte PC-Session): Android-EMULATOR-Test grün**
|
||||
(API 36: Neuanlage verschlüsselt, Klartext-Migration beim ersten Start,
|
||||
Neustart mit Keystore-Schlüssel ohne Re-Migration – Details im
|
||||
Status-Kopf von `docs/SQLCIPHER_MIGRATION.md`). **Bleibt offen:**
|
||||
echtes ARM-Gerät mit eingeloggter Session + Push-Isolate-Test
|
||||
(FCM liest verschlüsselte DB, secure_storage im Background-Isolate) –
|
||||
Testplan Punkt 4 in `docs/SQLCIPHER_MIGRATION.md`;
|
||||
erst nach grünem Gerätetest Release + Utas Gerät (vorher ihr Key-Backup
|
||||
prüfen!), dann abhaken.
|
||||
`sqlcipher_flutter_libs` steht zwar in `pubspec.yaml`, wird aber nirgends
|
||||
|
||||
@@ -1,2 +1,6 @@
|
||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||
android.builtInKotlin=false
|
||||
# This newDsl flag was added automatically by Flutter migrator
|
||||
android.newDsl=false
|
||||
|
||||
@@ -4,9 +4,22 @@
|
||||
> Windows mit Bernds echter 14-MB-DB praxisgetestet** (Migration gelaufen,
|
||||
> 23 Tabellen verifiziert, Login/E2EE danach intakt, Neustart öffnet die
|
||||
> verschlüsselte DB, `flutter test` deckt Migration/Fehlpfade mit echtem
|
||||
> SQLCipher ab). **Android bleibt UNGETESTET** (Punkt 4 des Testplans unten:
|
||||
> Migration auf Gerät, Push-Isolate + secure_storage) – erst danach Release
|
||||
> und Uta. **Abweichung vom Plan unten:** Die Annahme „keine Desktop-Binaries"
|
||||
> SQLCipher ab).
|
||||
> **Android-Emulator-Test 2026-07-06 (API 36, x86_64, Debug-APK) GRÜN:**
|
||||
> (a) frische Installation legt die DB direkt verschlüsselt an
|
||||
> (Header = Zufallsbytes, per run-as verifiziert), kein Cipher-Fallback im
|
||||
> auth_log; (b) Update-Szenario nach `pm clear` + untergeschobener
|
||||
> Klartext-DB (synthetisch, 2 Tabellen/550 Zeilen): Migration lief beim
|
||||
> ersten Start („2 Tabellen verifiziert" im auth_log), `.premigration`
|
||||
> liegt da, DB danach verschlüsselt; (c) Neustart öffnet mit dem
|
||||
> Keystore-Schlüssel OHNE Re-Migration, App rendert normal den
|
||||
> Login-Screen. Damit sind openCipherOnAndroid, sqlcipher_export und
|
||||
> flutter_secure_storage auf Android (Haupt-Isolate) real belegt.
|
||||
> **Offen bleibt (deshalb Punkt 4 NICHT voll abgehakt):** echtes
|
||||
> ARM-Gerät, Migration einer ECHTEN eingeloggten Session auf Android und
|
||||
> der Push-Test (FCM-Isolate liest verschlüsselte DB, secure_storage im
|
||||
> Background-Isolate) – braucht ein Testgerät mit eingeloggtem Account.
|
||||
> Erst danach Release und Uta. **Abweichung vom Plan unten:** Die Annahme „keine Desktop-Binaries"
|
||||
> ist seit sqlcipher_flutter_libs 0.6.x überholt – das Plugin baut SQLCipher
|
||||
> auf Windows/Linux als `sqlite3.dll`/`libsqlite3.so` mit (im Build-Output
|
||||
> verifiziert). Deshalb ist Phase 1 NICHT Android-only: Windows/Linux
|
||||
|
||||
Reference in New Issue
Block a user