#!/usr/bin/env bash # # Store-Screenshots über den Demo-Login aufnehmen. # # Fährt den integration_test-Screenshot-Lauf (integration_test/screenshot_test.dart) # über flutter drive für die drei von Google Play verlangten Formfaktoren durch # (Phone + 7″ + 10″ Tablet sind inzwischen Pflicht). Statt drei AVDs zu verwalten, # wird EIN laufendes Gerät/Emulator pro Durchlauf per `adb shell wm size/density` # auf die Zielauflösung gebracht; takeScreenshot liefert dann Frames in genau # dieser Pixelgröße. # # Ablage: # - kanonisch (versioniert): materials/screenshots/android// # - Kopie für den Upload: android/fastlane/metadata/android/de-DE/images/<...>Screenshots/ # Danach: `cd android && fastlane upload_screenshots`. # # Voraussetzungen: # - genau ein per `adb devices` sichtbares Gerät/Emulator (>= Android 8) # - flutter, adb im PATH # # Aufruf (vom Client-Projektwurzelverzeichnis): # tool/screenshots.sh # debug-Build (schnell) # BUILD_MODE=profile tool/screenshots.sh # PROFILES="phone" tool/screenshots.sh # nur eine Größe set -euo pipefail cd "$(dirname "$0")/.." BUILD_MODE="${BUILD_MODE:-debug}" MATERIALS_BASE="materials/screenshots/android" FASTLANE_BASE="android/fastlane/metadata/android/de-DE/images" APP_ID="eu.mhsl.marianum.mobile.client" # name | breite x höhe (px) | dichte (dpi) | materials-Ordner | fastlane-Ordner # Phone nutzt die NATIVE Displayauflösung des Geräts (voller Hochformat, nicht # auf 16:9 gestaucht). Tablets im QUERFORMAT (Breite > Höhe); bei den # Landscape-Breiten (>1000dp) zeigt Talk zudem die Master-Detail-Splitview. # Dichten so gewählt, dass die adaptive Bottom-Bar die passende Tab-Anzahl zeigt. declare -A PROFILE_SIZE=( [phone]="native" [seven]="1920x1200" [ten]="2560x1600" ) declare -A PROFILE_DENSITY=( [phone]="native" [seven]="240" [ten]="280" ) declare -A PROFILE_MATERIALS=( [phone]="phone" [seven]="7-inch" [ten]="10-inch" ) declare -A PROFILE_FASTLANE=( [phone]="phoneScreenshots" [seven]="sevenInchScreenshots" [ten]="tenInchScreenshots" ) PROFILES="${PROFILES:-phone seven ten}" # App-APK einmal vorab bauen, damit sie vor jedem `flutter drive` installiert # und die Notification-Permission gegrantet werden kann (drive deinstalliert die # App nach jedem Lauf, sonst wäre der Grant weg und ein Systemdialog könnte die # Screenshots verdecken). Der eigentliche drive-Lauf reinstalliert sie per -r. APK="build/app/outputs/flutter-apk/app-${BUILD_MODE}.apk" echo "Baue App-APK ($BUILD_MODE) vorab…" flutter build apk "--$BUILD_MODE" reset_display() { echo "Setze Displaygröße/-dichte zurück…" adb shell wm size reset || true adb shell wm density reset || true } trap reset_display EXIT for profile in $PROFILES; do size="${PROFILE_SIZE[$profile]}" density="${PROFILE_DENSITY[$profile]}" materials_dir="$MATERIALS_BASE/${PROFILE_MATERIALS[$profile]}" fastlane_dir="$FASTLANE_BASE/${PROFILE_FASTLANE[$profile]}" echo "" echo "=== Profil '$profile' ($size @ ${density}dpi) -> $materials_dir ===" mkdir -p "$materials_dir" "$fastlane_dir" rm -f "$materials_dir"/*.png "$fastlane_dir"/*.png # "native" -> Geräteauflösung/-dichte verwenden (für Phone), sonst erzwingen. if [ "$size" = "native" ]; then adb shell wm size reset adb shell wm density reset else adb shell wm size "$size" adb shell wm density "$density" fi # App sicherstellen, frische (ausgeloggte) Session erzwingen und # Notification-Permission erteilen, bevor drive läuft. pm clear setzt auch die # Runtime-Permissions zurück, daher der Grant DANACH. [ -f "$APK" ] && adb install -r "$APK" >/dev/null 2>&1 || true adb shell pm clear "$APP_ID" >/dev/null 2>&1 || true adb shell pm grant "$APP_ID" android.permission.POST_NOTIFICATIONS 2>/dev/null || true sleep 2 SCREENSHOT_OUT_DIR="$materials_dir" flutter drive \ --driver=test_driver/integration_test.dart \ --target=integration_test/screenshot_test.dart \ --"$BUILD_MODE" \ --no-dds # Kanonische Bilder in den Fastlane-Upload-Ordner spiegeln. cp "$materials_dir"/*.png "$fastlane_dir"/ echo "Profil '$profile' fertig: $(ls -1 "$materials_dir"/*.png 2>/dev/null | wc -l) Screenshots" done reset_display trap - EXIT echo "" echo "Kanonische Screenshots: $MATERIALS_BASE/{phone,7-inch,10-inch}/" echo "Upload: cd android && fastlane upload_screenshots"