Files
fn_registry/bash/functions/infra/android_emulator_start.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

3.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags params output uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path
android_emulator_start function bash infra 1.1.0 impure android_emulator_start(avd_name: string, timeout_s: int) -> string Arranca un AVD Android en background y espera a que termine de bootear. Linux-first: resuelve el emulator/adb nativos del SDK; fallback a binarios .exe solo bajo WSL2. Idempotente: si ya hay un emulador corriendo, imprime 'already running' y su serial sin lanzar otro.
android
emulator
linux
avd
wsl
name desc
avd_name Nombre del AVD a arrancar (visible con android_emulator_list o `emulator -list-avds`)
name desc
timeout_s Timeout total en segundos para esperar el boot completo. Opcional, default 180
Serial del device emulado (ej. emulator-5554) en stdout. Exit 0 = boot completo, exit 1 = timeout o emulador murio.
adb_wsl_bash_infra
false error_go_core
false
bash/functions/infra/android_emulator_start.sh

Ejemplo

source ~/android-sdk/env.sh          # exporta ANDROID_HOME -> resuelve emulator/adb nativos
source bash/functions/infra/android_emulator_start.sh

# Arrancar AVD con timeout por defecto (180s)
serial=$(android_emulator_start "Pixel_API34")
echo "Emulador listo: $serial"   # emulator-5554

# Con timeout personalizado
serial=$(android_emulator_start "Pixel_API34" 300)

Para ver la ventana del emulador en un escritorio Linux, exporta DISPLAY (y XAUTHORITY) antes de invocar.

Cuando usarla

Cuando un script necesita un emulador booteado antes de instalar un APK o correr tests instrumentados (gradle_instrumented_test, run_kotlin_app_tests). Es idempotente, así que se puede llamar al principio de cualquier pipeline sin comprobar antes si ya hay uno arriba.

Gotchas

  • Linux-first. Resuelve EMULATOR/ADB desde $ANDROID_HOME/{emulator/emulator, platform-tools/adb} o del PATH; emulator.exe/adb.exe solo como fallback bajo WSL2. Override manual con EMULATOR=/ADB=.
  • Necesita DISPLAY para ventana. Sin un servidor X accesible el emulador puede fallar al abrir ventana. Para headless/CI añade -no-window (editar la función o lanzar el emulador aparte).
  • Aceleración KVM. Requiere acceso a /dev/kvm (grupo kvm o ACL). Sin ella el boot es lentísimo o falla.
  • Log del emulador en /tmp/emulator_<avd>.log, PID en /tmp/emulator_<avd>.pid.
  • El timeout total se reparte: primera mitad para adb wait-for-device, segunda para sys.boot_completed=1.

Capability growth log

  • v1.1.0 (2026-06-03) — Linux-first: resuelve emulator/adb nativos del SDK ($ANDROID_HOME) antes que los .exe de Windows (ahora solo fallback WSL2); se elimina el default hardcodeado /mnt/c/Users/lucas/.... fix: timeout <n> adb_run wait-for-device fallaba siempre porque timeout no puede ejecutar la función shell adb_run; ahora invoca el binario "$ADB" directamente.