Files
fn_registry/bash/functions/infra/adb_wsl.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.2 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
adb_wsl function bash infra 1.1.0 impure source adb_wsl.sh [ADB=<path>] [ANDROID_HOME=<sdk_root>] Wrapper sourceable para resolver e invocar adb. Linux-first: usa el adb nativo del Android SDK ($ANDROID_HOME) o del PATH; fallback a adb.exe solo si detecta WSL2. Expone adb_run, adb_devices, adb_pick_serial, adb_s, adb_wait_boot.
android
adb
linux
emulator
wsl
name desc
ADB Env var opcional. Path absoluto al binario adb (override explicito). Si no se fija, se resuelve Linux-first: $ANDROID_HOME/platform-tools/adb, luego adb del PATH, luego adb.exe si WSL2.
name desc
ANDROID_HOME Env var opcional. Raiz del Android SDK nativo. Si esta presente, se usa $ANDROID_HOME/platform-tools/adb. Tambien se acepta ANDROID_SDK_ROOT.
Source-able shell helpers: adb_run, adb_devices, adb_pick_serial, adb_s, adb_wait_boot, adb_wsl_to_win. Resuelve y fija la env var ADB al binario adb disponible.
false error_go_core
false
bash/functions/infra/adb_wsl.sh

Cuando usarla

Sourcéala como capa base de cualquier script que hable con un device o emulador Android via adb. Es la dependencia comun de todo el toolbelt android del registry (android_screenshot, android_input_*, android_logcat, android_app_*, android_push/pull). En Linux nativo resuelve el adb del SDK automaticamente; no hace falta configurar nada si ANDROID_HOME esta exportado (o adb esta en el PATH).

Ejemplo

# Linux nativo: con el SDK instalado y ANDROID_HOME exportado, resuelve solo.
source ~/android-sdk/env.sh
source bash/functions/infra/adb_wsl.sh
adb_devices
# List of devices attached
# emulator-5554   device

# Fijar binario adb explicito (override)
ADB=/opt/android/platform-tools/adb source bash/functions/infra/adb_wsl.sh

# Smoke test
bash bash/functions/infra/adb_wsl.sh --self-test
# Android Debug Bridge version 1.0.41

Funciones expuestas

adb_run "<args...>"

Ejecuta $ADB con los argumentos dados. Retorna el exit code de adb.

adb_run shell ls /sdcard/
adb_run install app.apk

adb_devices

Alias de adb_run devices. Lista dispositivos/emuladores conectados.

adb_pick_serial [--serial <S>] [...]

Resuelve el serial a usar (multi-device). Lee --serial X de los args y setea los globals ADB_PICK_SERIAL y ADB_PICK_REST. Si no se pasa, autoselecciona el primer device/emulador conectado.

adb_pick_serial "$@" || { echo "no device" >&2; exit 3; }
serial="$ADB_PICK_SERIAL"; set -- "${ADB_PICK_REST[@]}"

adb_s <serial> <args...>

Atajo de adb_run -s <serial> <args...> para multi-device.

adb_wait_boot [timeout_s]

Espera a que el emulador/dispositivo complete el boot (sys.boot_completed = 1). Polling cada 3s. Retorna 0 si bootó, 1 si timeout (default 120s).

adb_wsl_to_win <path_wsl>

Legacy WSL: convierte path WSL→Windows con wslpath -w. En Linux nativo (sin wslpath) devuelve el path tal cual.

Gotchas

  • Linux-first. El default ya NO es Windows. Resolucion: $ADB$ANDROID_HOME/platform-tools/adbadb del PATH → (solo si /proc/version indica WSL2) adb.exe. En un PC Linux con el SDK instalado funciona sin configurar nada.
  • Necesita el SDK o adb en PATH. Si no encuentra adb aborta con mensaje a stderr. Instala con fn run install_android_sdk_bash_infra y exporta ANDROID_HOME (o source ~/android-sdk/env.sh).
  • ADB se resuelve una sola vez al sourcing. Cambiar el SDK despues requiere re-sourcear.
  • Sourcéala con bash, no zsh. Los consumidores usan ${BASH_SOURCE[0]} para localizar este archivo; ejecutarlos con bash <file> (no zsh/source desde zsh) resuelve el path correctamente.

Capability growth log

  • v1.1.0 (2026-06-03) — Linux-first: la resolucion de adb ahora prioriza el adb nativo del SDK ($ANDROID_HOME/platform-tools/adb) y del PATH; el adb.exe de Windows queda como fallback legacy solo bajo WSL2. Se elimina el default hardcodeado /mnt/c/Users/lucas/.... Todo el toolbelt android (~20 funciones) pasa a funcionar en Linux nativo sin preexportar ADB.