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
authWithPasswordaus der App fehl.test/widget_test.dartvorhanden — 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