Files
mesh-configs/skills/devops/mobile-apk-flutter-build/references/persoent-apk-2026-08-07.md
T

61 lines
3.4 KiB
Markdown

# 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