efc9911925
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>
97 lines
4.2 KiB
Markdown
97 lines
4.2 KiB
Markdown
---
|
|
name: adb_wsl
|
|
kind: function
|
|
lang: bash
|
|
domain: infra
|
|
version: "1.1.0"
|
|
purity: impure
|
|
signature: "source adb_wsl.sh [ADB=<path>] [ANDROID_HOME=<sdk_root>]"
|
|
description: "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."
|
|
tags: ["android", "adb", "linux", "emulator", "wsl"]
|
|
params:
|
|
- name: ADB
|
|
desc: "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: ANDROID_HOME
|
|
desc: "Env var opcional. Raiz del Android SDK nativo. Si esta presente, se usa $ANDROID_HOME/platform-tools/adb. Tambien se acepta ANDROID_SDK_ROOT."
|
|
output: "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."
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: []
|
|
tested: false
|
|
tests: []
|
|
test_file_path: ""
|
|
file_path: "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
|
|
|
|
```bash
|
|
# 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.
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
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/adb` → `adb` 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`.
|