--- name: android-build description: "Android-App bauen (assembleDebug/Release), Gradle-Kommandos, häufige Build-Fehler beheben. Verwende diesen Skill für alles rund um Kompilierung, Gradle, Dependency-Management und Build-Konfiguration. Trigger-Phrasen: 'build', 'bauen', 'kompilieren', 'assembleDebug', 'Gradle', 'dependency', 'APK'." --- # Skill: Android Build Baut die Bollwerk-Android-App mit Gradle. Handhabt bekannte Fallstricke auf diesem Windows-Setup. --- ## Voraussetzungen | Komponente | Pfad / Wert | | ---------------- | ---------------------------------------------------------------------- | | Android SDK | `C:\Users\JensR\AppData\Local\Android\Sdk` | | ANDROID_HOME | User-Umgebungsvariable (persistent gesetzt) | | local.properties | `sdk.dir=C\\:\\\\Users\\\\JensR\\\\AppData\\\\Local\\\\Android\\\\Sdk` | | Java | OpenJDK 21 (im PATH) | | Gradle | 8.11.1 (via Wrapper) | | Kotlin | 2.1.10 | | AGP | 8.7.3 | --- ## Build-Kommandos Verwende **immer** das `android-dev.ps1`-Skript statt roher Gradle-Aufrufe: ```powershell # Debug-Build (Standard) & ".github/skills/android-build/android-dev.ps1" -Action build # Clean + Build (bei File-Locks oder korruptem Cache) & ".github/skills/android-build/android-dev.ps1" -Action clean-build # Nur clean & ".github/skills/android-build/android-dev.ps1" -Action clean # Hot Reload: Build + Install + Relaunch auf laufendem Emulator (ohne Neustart) & ".github/skills/android-build/android-dev.ps1" -Action hot-reload ``` ### Screenshot Screenshots sind ein eigenständiges Skript (nicht Teil von `android-dev.ps1`): ```powershell # Screenshot mit PNG-Validierung & ".github/skills/android-build/screenshot.ps1" # Screenshot + sichtbare UI-Texte extrahieren & ".github/skills/android-build/screenshot.ps1" -UiDump ``` **Wichtig:** Niemals `adb exec-out screencap -p > file.png` in PowerShell verwenden – PowerShell konvertiert Binärdaten in UTF-16 und zerstört den PNG-Header. ### Direkter Gradle-Aufruf (Fallback) Falls das Skript nicht verfügbar ist, gibt es **zwei verlässliche Varianten**: #### Variante A – via `execution_subagent` (empfohlen) ``` cd x:\bollwerk ; .\gradlew assembleDebug test ``` - `.\gradlew` (ohne `.bat`) funktioniert hier einwandfrei - Kein `| Out-String` nötig – `execution_subagent` wertet den Output korrekt aus - Tasks können kombiniert werden: `assembleDebug test`, `assembleDebug assembleRelease` etc. - `execution_subagent` meldet `BUILD SUCCESSFUL` zuverlässig, auch wenn Gradle Warnungen auf stderr ausgibt #### Variante B – via `run_in_terminal` (PowerShell direkt) ```powershell $env:ANDROID_HOME = "C:\Users\JensR\AppData\Local\Android\Sdk" cd "x:\bollwerk" .\gradlew.bat assembleDebug 2>&1 | Out-String ``` **Wichtig:** Hier **muss** `.\gradlew.bat` (mit `.bat`) und `| Out-String` verwendet werden – ohne `.bat` kann PowerShell die Ausgabe falsch interpretieren; ohne `| Out-String` werden stderr-Warnungen als Fehler gewertet und Exit-Code 1 zurückgegeben, obwohl Gradle `BUILD SUCCESSFUL` meldet. --- ## Bekannte Probleme ### 1. Build-Dateien gesperrt (`AccessDeniedException`) Dateien im `build/`-Verzeichnis können durch andere Prozesse gesperrt sein. **Lösung:** ```powershell Remove-Item "app\build" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item "build" -Recurse -Force -ErrorAction SilentlyContinue # Dann erneut bauen ``` Das `android-dev.ps1`-Skript macht dies automatisch bei `-Action clean-build`. ### 2. PowerShell zeigt Exit-Code 1 trotz BUILD SUCCESSFUL Gradle gibt Deprecation-Warnungen auf stderr aus. PowerShell wertet das als Fehler. **Lösung:** Prüfe den Gradle-Output auf `BUILD SUCCESSFUL`, nicht den Exit-Code. ### 3. `Batchvorgang abbrechen (J/N)?` Tritt auf, wenn `gradlew.bat` ein Ctrl+C-Signal empfängt (z.B. durch Terminal-Timeout). **Lösung:** Verwende `| Out-String` und ausreichend Timeout (600s+). Das `android-dev.ps1`-Skript umgeht dieses Problem. ### 4. `android.useAndroidX` fehlt ``` gradle.properties muss enthalten: android.useAndroidX=true ``` --- ## APK-Ausgabe | Variante | Pfad | | -------- | ----------------------------------------------- | | Debug | `app/build/outputs/apk/debug/app-debug.apk` | | Release | `app/build/outputs/apk/release/app-release.apk` | --- ## Terminal-Aufruf-Konventionen ```powershell # Immer so aufrufen: run_in_terminal mode=sync timeout=600000 ``` Gradle-Builds dauern beim ersten Mal 2–5 Minuten (Daemon-Start + Download). Folge-Builds: 10–30 Sekunden.