Files
fn_registry/bash/functions/infra/install_android_sdk.md
T
egutierrez efc9911925 feat(kotlin-compose): design system fn.compose:ui + toolbelt android Linux-first
Design system Compose (kotlin/functions/ui, modulo Gradle `fn.compose:ui`):
- FnTokens + FnTheme con la paleta heredada al hex de cpp/DESIGN_SYSTEM.md
  (Mantine v9 dark + indigo), identica a la web @fn_library y a las apps C++.
- 26 componentes Compose (Layout/Display/Inputs/Feedback/Data/Charts) +
  FnTheme + FnTokens registrados en el registry (28 entradas kind=component
  lang=kt domain=ui), descubribles via fn_search. Habilitan init_kotlin_app.

Recuperacion: el commit cb6d9e6 habia anadido `kotlin/functions/ui/` al
.gitignore, por eso el design system nunca se versiono y se perdio del working
tree. Des-ignorado; el .gitignore interno del modulo ya excluye
build/.gradle/local.properties. La gallery (apps/gallery_kt) se recupero del
sub-repo Gitea y sus 27 componentes se reconstruyeron con su MainActivity como
contrato exacto.

Toolbelt Android Linux-first (antes asumia WSL2 + Windows):
- adb_wsl 1.1.0, android_emulator_start 1.1.0, android_emulator_list 1.1.0:
  resuelven adb/emulator nativos del SDK ($ANDROID_HOME), .exe solo fallback WSL2.
- android_emulator_start: fix `timeout adb_run wait-for-device` (timeout no puede
  ejecutar una funcion del shell; ahora invoca el binario $ADB directamente).
- install_android_sdk 1.0.1: fix licencias bajo pipefail (SIGPIPE de `yes`) +
  trap EXIT con variable unbound.
- docs/capabilities/android.md regenerado Linux-first + seccion design system.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 23:43:59 +02:00

4.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
install_android_sdk function bash infra 1.0.1 impure install_android_sdk() -> void Descarga e instala Android SDK command-line tools y JDK 17 localmente (sin root/sudo) en $ANDROID_SDK_DIR (default: $HOME/android-sdk). Idempotente: detecta instalacion existente y sale sin hacer nada. Genera env.sh con JAVA_HOME, ANDROID_HOME y PATH listos para hacer source.
android
sdk
jdk
java
install
infra
mobile
false error_go_core
sin salida estructurada; imprime progreso y resumen final con rutas de instalacion false
bash/functions/infra/install_android_sdk.sh

Ejemplo

# Instalacion en directorio por defecto ($HOME/android-sdk)
source install_android_sdk.sh

# Instalacion en directorio personalizado
ANDROID_SDK_DIR=/opt/android source install_android_sdk.sh

# Si ya esta instalado:
# Android SDK ya instalado en: /home/user/android-sdk

# Instalacion completa imprime:
# Descargando JDK 17...
# JDK 17 instalado: /home/user/android-sdk/jdk-17/jdk-17.0.x+y
# Descargando Android cmdline-tools...
# cmdline-tools instalados
# Aceptando licencias de Android SDK...
# Instalando platform-tools, platforms;android-34, build-tools;34.0.0...
#
# Android SDK instalado en: /home/user/android-sdk
# JDK 17: /home/user/android-sdk/jdk-17/jdk-17.0.x+y
# Para activar: source /home/user/android-sdk/env.sh

# Activar entorno en sesion actual
source ~/android-sdk/env.sh

Cuando usarla

Cuando necesites un Android SDK funcional en una maquina Linux sin permisos de root: CI, contenedores, o un PC de desarrollo donde quieras un SDK aislado en $HOME. Instala la base minima para compilar (cmdline-tools + JDK 17 + platform-tools + API 34 + build-tools). Hazle source para tener sdkmanager/avdmanager/adb en el PATH antes de invocar gradle_run, gradle_assemble_debug o capacitor_build_apk.

Gotchas

  • No instala emulator ni system images. Solo la base de compilacion. Para correr un AVD: tras hacer source env.sh, instala emulator y una imagen (sdkmanager "emulator" "system-images;android-34;google_apis;x86_64") y crea el AVD con avdmanager create avd.
  • Aceleracion KVM: el emulador necesita acceso a /dev/kvm. Verifica con [ -w /dev/kvm ]; si no, anade tu usuario al grupo kvm (sudo usermod -aG kvm $USER + re-login) o concede ACL.
  • URL de cmdline-tools clavada a la build 11076708 (2024). Si Google la retira, actualizar tools_url en el .sh.
  • Idempotente: re-ejecutar no reinstala; detecta sdkmanager existente y sale en 0.

Notas

Requiere curl y unzip (disponibles en la mayoria de distros Linux). No requiere root ni sudo.

El JDK se descarga desde Adoptium (Eclipse Temurin) via su API oficial. La URL de cmdline-tools apunta a la version 11076708 (2024). Si Google actualiza la version, cambiar la URL con el nuevo numero de build.

La reorganizacion del zip es necesaria porque Google distribuye cmdline-tools con estructura cmdline-tools/bin/... pero sdkmanager espera estar en cmdline-tools/latest/bin/sdkmanager para que Android Studio y otras herramientas lo detecten correctamente.

El archivo env.sh generado en $ANDROID_SDK_DIR/env.sh contiene las variables de entorno necesarias (JAVA_HOME, ANDROID_HOME, ANDROID_SDK_ROOT, PATH) y puede hacerse source desde .bashrc, .zshrc o desde scripts de CI.

Paquetes instalados: platform-tools (adb, fastboot), platforms;android-34 (API 34), build-tools;34.0.0.

Capability growth log

  • v1.0.1 (2026-06-03) — fix: yes | sdkmanager --licenses daba falso negativo bajo pipefail (SIGPIPE de yes, exit 141) abortando una instalacion exitosa; ahora se desactiva pipefail solo en ese pipe. fix: el trap EXIT referenciaba $tmp_dir (variable local) fuera del scope de la funcion → "unbound variable" con set -u; ahora es global con expansion defensiva.