27ae829a1e
ANDROID_HOME resolution ahora busca en orden: 1. $HOME/android-sdk — path que instala install_android_sdk_bash_infra 2. $HOME/Android/Sdk — default Android Studio Linux 3. WSL2 Windows path — $ANDROID_SDK_WIN o /mnt/c/Users/$USER/.../Android/Sdk Cada candidato se valida con platform-tools/ presente (no solo directorio raiz). Fix: issue 0076 Co-Authored-By: fn-orquestador <noreply@anthropic.com>
90 lines
3.4 KiB
Bash
90 lines
3.4 KiB
Bash
#!/usr/bin/env bash
|
|
# gradle_run — Wrapper canonico para invocar gradlew Android en WSL2.
|
|
# Valida JDK 17 + ANDROID_HOME antes de delegar al wrapper del proyecto.
|
|
#
|
|
# Uso como libreria: source bash/functions/infra/gradle_run.sh
|
|
# Uso directo: bash bash/functions/infra/gradle_run.sh <project_dir> <task...>
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# gradle_run <project_dir> <task...>
|
|
#
|
|
# Resuelve JAVA_HOME y ANDROID_HOME si no estan fijados, luego invoca
|
|
# ./gradlew con las tareas indicadas en el directorio del proyecto.
|
|
#
|
|
# Exits:
|
|
# 0 — gradlew completado con exito
|
|
# 1 — JDK 17 no encontrado
|
|
# 2 — ./gradlew no existe en project_dir
|
|
# * — exit code propagado de gradlew
|
|
# ---------------------------------------------------------------------------
|
|
gradle_run() {
|
|
local project_dir="$1"
|
|
shift || true
|
|
|
|
# ---- Resolver JAVA_HOME ------------------------------------------------
|
|
local java_home="${JAVA_HOME:-}"
|
|
if [[ -z "$java_home" ]]; then
|
|
local _jdk_candidates=(
|
|
"/usr/lib/jvm/java-17-openjdk-amd64"
|
|
"/usr/lib/jvm/temurin-17-jdk-amd64"
|
|
"/opt/android-studio-jbr/jbr"
|
|
)
|
|
for _candidate in "${_jdk_candidates[@]}"; do
|
|
if [[ -d "$_candidate" ]]; then
|
|
java_home="$_candidate"
|
|
break
|
|
fi
|
|
done
|
|
unset _jdk_candidates _candidate
|
|
fi
|
|
|
|
if [[ -z "$java_home" ]]; then
|
|
echo "gradle_run: JDK 17 not found, install via install_android_sdk" >&2
|
|
return 1
|
|
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 _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
|
|
# el error adecuado. No bloqueamos aqui para permitir builds puros JVM.
|
|
|
|
# ---- Verificar gradlew -------------------------------------------------
|
|
if [[ ! -f "${project_dir}/gradlew" ]]; then
|
|
echo "gradle_run: no gradlew in ${project_dir}" >&2
|
|
return 2
|
|
fi
|
|
|
|
# ---- Invocar gradlew ----------------------------------------------------
|
|
(
|
|
cd "$project_dir" || return 1
|
|
JAVA_HOME="$java_home" ANDROID_HOME="${android_home:-}" ./gradlew "$@"
|
|
)
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Ejecucion directa
|
|
# ---------------------------------------------------------------------------
|
|
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
|
|
gradle_run "$@"
|
|
fi
|