diff --git a/bash/functions/infra/gradle_run.md b/bash/functions/infra/gradle_run.md index c89ff7f2..65c36912 100644 --- a/bash/functions/infra/gradle_run.md +++ b/bash/functions/infra/gradle_run.md @@ -3,7 +3,7 @@ name: gradle_run kind: function lang: bash domain: infra -version: "1.0.0" +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." @@ -24,7 +24,7 @@ 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." +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 @@ -50,10 +50,12 @@ Si no esta fijado en el entorno, busca en orden: 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 +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 @@ -69,4 +71,8 @@ Si no esta fijado: 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) --- diff --git a/bash/functions/infra/gradle_run.sh b/bash/functions/infra/gradle_run.sh index 498a3cf6..55a83a91 100644 --- a/bash/functions/infra/gradle_run.sh +++ b/bash/functions/infra/gradle_run.sh @@ -44,16 +44,25 @@ gradle_run() { fi # ---- Resolver ANDROID_HOME --------------------------------------------- + # Orden de busqueda (de mas probable a menos para entorno Linux/WSL2): + # 1. $HOME/android-sdk — instalado por install_android_sdk_bash_infra (default) + # 2. $HOME/Android/Sdk — ruta de Android Studio en Linux + # 3. $ANDROID_SDK_WIN — SDK Windows montado en WSL2 via /mnt/c/... + # Solo se acepta un candidato si tiene platform-tools/, no solo el directorio raiz. local android_home="${ANDROID_HOME:-}" if [[ -z "$android_home" ]]; then - local _default_linux="$HOME/Android/Sdk" - if [[ -d "$_default_linux" ]]; then - android_home="$_default_linux" - elif [[ -n "${ANDROID_SDK_WIN:-}" && -d "${ANDROID_SDK_WIN}" ]]; then - # SDK Windows montado en WSL via /mnt/c/... - android_home="${ANDROID_SDK_WIN}" - fi - unset _default_linux + local _sdk_candidates=( + "$HOME/android-sdk" + "$HOME/Android/Sdk" + "${ANDROID_SDK_WIN:-/mnt/c/Users/$USER/AppData/Local/Android/Sdk}" + ) + for _candidate in "${_sdk_candidates[@]}"; do + if [[ -d "$_candidate" && -d "$_candidate/platform-tools" ]]; then + android_home="$_candidate" + break + fi + done + unset _sdk_candidates _candidate fi # ANDROID_HOME puede quedar vacio si no hay SDK instalado; gradle mostrara