Files

3.4 KiB

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

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

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