--- name: adb_wsl kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "source adb_wsl.sh [ADB=] [ANDROID_SDK_WIN=]" description: "Wrapper sourceable para usar adb.exe Windows desde WSL2. Resuelve binario, convierte paths, espera boot del emulador." tags: ["android", "adb", "wsl", "windows"] params: - name: ADB desc: "Env var opcional. Path absoluto a adb.exe. Si no se fija, se construye desde ANDROID_SDK_WIN o el default /mnt/c/Users/lucas/AppData/Local/Android/Sdk." - name: ANDROID_SDK_WIN desc: "Env var opcional. Raiz del Android SDK montado en WSL. Default: /mnt/c/Users/lucas/AppData/Local/Android/Sdk." output: "Source-able shell helpers: adb_run, adb_devices, adb_wsl_to_win, adb_wait_boot. Define ADB env var apuntando a Windows adb.exe via ANDROID_SDK_WIN." 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" --- ## Uso ```bash # Sourcear (usa SDK default) source bash/functions/infra/adb_wsl.sh # Sourcear con SDK custom ANDROID_SDK_WIN=/mnt/d/Android/Sdk source bash/functions/infra/adb_wsl.sh # Sourcear con binario fijo ADB=/mnt/c/my/tools/adb.exe source bash/functions/infra/adb_wsl.sh ``` ## Funciones expuestas ### `adb_run ""` Ejecuta `$ADB` con los argumentos dados. Retorna el exit code de `adb.exe`. ```bash adb_run shell ls /sdcard/ adb_run install app.apk ``` ### `adb_devices` Alias de `adb_run devices`. Lista dispositivos/emuladores conectados. ```bash adb_devices # List of devices attached # emulator-5554 device ``` ### `adb_wsl_to_win ` Convierte un path WSL a formato Windows con `wslpath -w`. Si `wslpath` no está disponible retorna el path sin convertir. ```bash win_path=$(adb_wsl_to_win /home/lucas/proyecto/app.apk) # C:\Users\lucas\AppData\Local\... (o la ruta Windows equivalente) adb_run install "$win_path" ``` ### `adb_wait_boot [timeout_s]` Espera a que el emulador/dispositivo complete el boot (`sys.boot_completed = 1`). Útil tras lanzar un AVD en CI. ```bash adb_wait_boot # timeout 120s adb_wait_boot 60 # timeout 60s ``` Retorna `0` si el boot se completó, `1` si expiró el timeout. ## Smoke test ```bash bash bash/functions/infra/adb_wsl.sh --self-test # OK ``` ## Notas - El script es **source-able**: define funciones en el shell actual, no crea subshell. - `ADB` se resuelve una sola vez al sourcing. Si el binario no existe en disco, la carga falla con mensaje en stderr y `return 1` / `exit 1`. - `adb_wait_boot` hace polling cada 3 segundos. Ajustar `interval` si el emulador es especialmente lento. - En WSL2 `wslpath` siempre está disponible; el fallback existe para entornos Linux puros que accidentalmente sourceen el archivo. - Si el emulador requiere `-s `, pasar el flag directamente a `adb_run`: `adb_run -s emulator-5554 shell ...`. ---