--- name: gradle_run kind: function lang: bash domain: infra version: "1.0.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 tanto SDK Linux (~/Android/Sdk via install_android_sdk) como 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: 1. Intenta `$HOME/Android/Sdk` (SDK Linux via `install_android_sdk_bash_infra`) 2. Si no existe, intenta `$ANDROID_SDK_WIN` (SDK Windows montado en `/mnt/c/...`) 3. Si ninguno, 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. ---