--- name: android_emulator_start kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "android_emulator_start(avd_name: string, timeout_s: int) -> string" description: "Arranca un AVD en background y espera a que termine de bootear. Idempotente: si ya hay emulador corriendo no lanza otro." tags: [android, emulator, wsl] params: - name: avd_name desc: "Nombre del AVD a arrancar (visible con android_emulator_list o `emulator.exe -list-avds`)" - name: timeout_s desc: "Timeout total en segundos para esperar el boot completo. Opcional, default 180" output: "Serial del device emulado (ej. emulator-5554) en stdout. Exit 0 = boot completo, exit 1 = timeout o emulador murio." uses_functions: ["adb_wsl_bash_infra"] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/android_emulator_start.sh" --- ## Ejemplo ```bash source bash/functions/infra/android_emulator_start.sh # Arrancar AVD con timeout por defecto (180s) serial=$(android_emulator_start "Pixel_6_API_34") echo "Emulador listo: $serial" # emulator-5554 # Con timeout personalizado serial=$(android_emulator_start "Pixel_6_API_34" 300) ``` ## Notas - Sourcea `adb_wsl.sh` del mismo directorio si existe (provee `ADB`, `adb_run`, `adb_wait_boot`). Si no, usa implementacion inline. - Resuelve `EMULATOR` y `ADB` desde `ANDROID_SDK_WIN` (default `/mnt/c/Users/lucas/AppData/Local/Android/Sdk`) o desde las variables de entorno `EMULATOR=` / `ADB=` si ya están fijadas. - Idempotente: si `adb devices` ya muestra un `emulator-*`, imprime "already running" + el serial y sale con exit 0 sin lanzar un segundo proceso. - Log del emulador en `/tmp/emulator_.log`. PID en `/tmp/emulator_.pid`. - El timeout total se reparte: primera mitad para `adb wait-for-device`, segunda mitad para esperar `sys.boot_completed=1`. - Diseñado para WSL2 con Android SDK instalado en Windows. En Linux nativo basta cambiar las rutas de los binarios via `EMULATOR=` y `ADB=`.