# PersoEnt APK Build — Session-Transcript (2026-08-07) Voller Verlauf des ersten Flutter-APK-Builds auf dem Headless-VPS (netcup, Ubuntu 24.04). Konkrete Fehlerbilder + Versionen, die beim Wiederholen helfen. ## Versionen (funktionierender Stack) - Flutter 3.24.5 stable · Dart 3.5.4 - Java: OpenJDK 17.0.19 - Android SDK: platforms;android-34, build-tools;34.0.0 (+ auto-nachgeladen 33.0.1) - AGP 8.1.0 (im Projekt `android/settings.gradle`), Kotlin 1.8.22 ## Fehlerbilder & Fixes ### 1. "The current Flutter SDK version is 0.0.0-unknown" beim pub get ``` fatal: detected dubious ownership in repository at '/opt/flutter' Because persoent_app depends on health_connect any which requires Flutter SDK version >=2.5.0, version solving failed. ``` Ursache: `/opt/flutter` einem anderen Eigentümer (root beim Entpacken) als git-owner erwartet → Flutters git-Versionserkennung bricht. NICHT das health_connect-Paket, das war Red Herring. Fix: `git config --global --add safe.directory /opt/flutter`. Danach `flutter --version` → `3.24.5 • stable • https://github.com/flutter/flutter.git`. ### 2. `flutter pub add health_connect` half nicht, bis safe.directory gesetzt war Erst safe.directory, DANN wiederholte `pub add` erfolgreich. Reihenfolge zählt: ohne Versionserkennung kann pub nicht lösen. ### 3. AGP 8.1 `namespace`-Konflikt (health_connect entfernt) ``` FAILURE: A problem occurred configuring project ':health_connect'. > Could not create an instance of type ... LibraryVariantBuilderImpl. > Namespace not specified. Specify a namespace in the module's build file. ``` AGP 8.1 erzwingt `namespace` in jedem Modul; älteres `health_connect`-Plugin (version ^0.0.0) hat keins. Fix: `flutter pub remove health_connect` und Grund-APK (ohne natives Health-Plugin) bauen. Health-Integration separat lösen (z.B. AGP-Angleich oder anderes Plugin). ### 4. `test/widget_test.dart` Default bricht analyze Default-Test referenziert `MyApp` (alte Template-Klasse). Nach App-Umbau: Test auf echten App-Widget-Namen updaten (hier `PersoEntApp`, `expect(find.text('PersoEnt'), findsWidgets)`). ## Build-Befehle ```bash export PATH="$PATH:/opt/flutter/bin" export ANDROID_HOME=/opt/android-sdk cd /opt/persoent_app flutter analyze # sauber machen flutter build apk --release # erstmal lang (Gradle-Downloads); ~2min danach # Ergebnis: build/app/outputs/flutter-apk/app-release.apk (22.2MB) ``` ## Deploy zum Download ```bash mkdir -p /var/www/persoent.perfekt-ohne-en.de/html/app cp build/app/outputs/flutter-apk/app-release.apk /var/www/persoent.perfekt-ohne-en.de/html/app/PersoEnt-Android.apk chown -R www-data:www-data /var/www/persoent.perfekt-ohne-en.de/html/app/ # Zugriff: https://persoent.perfekt-ohne-en.de/app/PersoEnt-Android.apk → HTTP 200 ``` ## PocketBase aus App heraus (CORS/Vorbereitung) - App nutzt `PocketBase('https://persoent.perfekt-ohne-en.de/pb')` (nginx `/pb/` → 127.0.0.1:8090) - **Offen (noch nicht gelöst):** CORS für den mobilen Client muss in PocketBase freigegeben werden, sonst schlägt `authWithPassword` aus der App fehl. `test/widget_test.dart` vorhanden — nur Grundgerüst ohne Health-Connect. ## Status - ✅ Login-Screen (E-Mail/Passwort via PocketBase) + Dashboard-UI (Schritte/Puls/Schlaf/Gewicht-Platzhalter) - ⏳ Health-Connect-Plugin + echtem Datenabgleich: noch offen (AGP-Konflikt) - ⏳ Google-Sign-In: Dependencies vorhanden, Flow noch nicht verdrahtet - ⏳ PocketBase-CORS für App-Client