--- name: gradle_run kind: function lang: bash domain: infra version: "1.1.0" purity: impure signature: "gradle_run(project_dir: string, task...: string) -> int" description: "Wrapper canonico para invocar gradlew Android en WSL2 con JDK 17 + ANDROID_HOME validados." tags: [android, gradle, kotlin, build] params: - name: project_dir desc: "Path absoluto al proyecto Gradle (debe contener gradlew)" - name: task desc: "Tarea(s) Gradle a ejecutar (ej. assembleDebug, :app:test). Variadic" output: "Stdout/stderr del build Gradle. Exit code = exit code de gradlew. Exit 1 si JDK17 missing, exit 2 si no hay gradlew." uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/gradle_run.sh" notes: "Las demas funciones gradle_* lo sourcean. Reutiliza patron de adb_wsl_bash_infra para ser source-able+ejecutable. Cubre SDK Linux en $HOME/android-sdk (install_android_sdk_bash_infra), $HOME/Android/Sdk (Android Studio), y SDK Windows (/mnt/c/...) montado en WSL." --- ## Ejemplo ```bash # Como libreria (en otro script gradle_*) source "$(dirname "${BASH_SOURCE[0]}")/gradle_run.sh" gradle_run "$project_dir" assembleDebug # Directo bash bash/functions/infra/gradle_run.sh /path/to/MyApp assembleDebug bash bash/functions/infra/gradle_run.sh /path/to/MyApp :app:test :app:lint ``` ## Comportamiento de resolucion ### JAVA_HOME Si no esta fijado en el entorno, busca en orden: 1. `/usr/lib/jvm/java-17-openjdk-amd64` 2. `/usr/lib/jvm/temurin-17-jdk-amd64` 3. `/opt/android-studio-jbr/jbr` Si ninguno existe → error en stderr y `return 1`. ### ANDROID_HOME Si no esta fijado, busca en orden (requiere que el directorio tenga `platform-tools/`): 1. `$HOME/android-sdk` — default de `install_android_sdk_bash_infra` (lowercase) 2. `$HOME/Android/Sdk` — default de Android Studio en Linux 3. `$ANDROID_SDK_WIN` (o `/mnt/c/Users/$USER/AppData/Local/Android/Sdk`) — SDK Windows montado en WSL2 Si ninguno existe con `platform-tools/`, lo deja vacio — gradle mostrara el error adecuado para builds JVM puros ## Exit codes | Codigo | Significado | |--------|-------------| | 0 | Build exitoso | | 1 | JDK 17 no encontrado | | 2 | `./gradlew` no existe en `project_dir` | | * | Exit code propagado de gradlew | ## Notas Source-able y ejecutable directo. Al sourcear, el caller importa la funcion `gradle_run` sin ejecutarla. Al ejecutar directamente, delega `"$@"` a `gradle_run`. No exporta `JAVA_HOME`/`ANDROID_HOME` al entorno del shell padre — los variables se pasan solo al subshell de gradlew para evitar contaminar el entorno. ## Capability growth log - v1.1.0 (2026-05-15) — ANDROID_HOME detection order: prioriza `$HOME/android-sdk` (install_android_sdk default) sobre `$HOME/Android/Sdk`; requiere platform-tools/ presente; anade WSL2 Windows path como fallback explicito (issue 0076) ---