#!/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 # --------------------------------------------------------------------------- # gradle_run # # 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