2010-09-03 9 views
24

Quiero crear un script donde empiezo un emulador y luego de que el sistema se haya iniciado completamente, quiero instalar un archivo .apk.Detectar cuando el emulador de Android está completamente iniciado

¿Cómo puedo saber cuándo el emulador está completamente arrancado para que pueda ejecutar el comando de instalación? Aquí http://developer.android.com/guide/developing/tools/adb.html se dice que adb wait-for-device install <app>.apk no es correcto.

Entonces, ¿cómo puedo lograr esto? ¿Es posible? ¿Es mi única opción dormir por unos minutos hasta que pueda estar seguro de que el emulador está encendido?

+1

Pruebe la solución que se menciona aquí: http://stackoverflow.com/questions/3618114/autostart-application-while-phone-boots-up/3618198#3618198 – ankitjaininfo

Respuesta

32

adb shell GetProp init.svc.bootanim

Esto le dirá si o no la animación de arranque está en marcha. Es lo que usamos en nuestro servidor de desarrollo sin cabeza para verificar si el emulador está activo. El sys.boot_completed de dac2009 es lo que me llevó a encontrar esa bandera. Usamos init.svc.bootanim en su lugar porque boot_completed tiene tendencia a activarse demasiado pronto.

+1

Cómo cargar el emulador sin cabeza en la memoria? – Dharmesh

+0

Este accesorio no funciona. Sólo sys.boot_completed –

+1

Mientras estaba probando la respuesta de @neuon, me di cuenta de que tenía que buscar una propiedad diferente para lograr la verificación más confiable _dev.bootcomplete_ (tenga en cuenta el prefijo: ** dev y no sys **, como sys .boot_completed se convierte en 1 vía antes de que finalice la inicialización) –

0

Puede configurar un receptor de radiodifusión que puede notificar que el dispositivo de arranque se ha completado

android:name="android.intent.action.BOOT_COMPLETED" 
+2

Esto no es lo que estoy pidiendo. Estoy hablando de hacer un script en la computadora de mi casa para instalar la aplicación en el emulador para poder automatizar el proceso de prueba. –

+0

¡Uy! Su título decía "Detectar cuando el emulador de Android está completamente iniciado" y pensé que sería el mejor enfoque posible. De todos modos, incluso si desea ejecutar un script desde su sistema, necesita saber cuándo se completó el arranque del estimulador. Puede ser que pueda iniciar algún tipo de servicio de la transmisión que puede llamar a una URL en su IIS local que puede disparar su secuencia de comandos ... – DeRagan

-1

Es posible analizar la salida stdout del emulador si se inicia con "-logcat VERBOSE" y esperar a que un mensaje que indica que el emulador está iniciado.

No vi ningún mensaje correcto en este momento en la salida, pero puede escribir una aplicación que esté escuchando "android.intend.action.BOOT_COMPLETED" y escriba algo en el registro.

Consulte http://developer.android.com/guide/developing/tools/emulator.html para obtener más información.

13

No estoy seguro si esto funciona en todos los dispositivos, pero funciona en los que he probado.

Si va al shell, puede escribir getprop y obtener una lista de las propiedades del teléfono. Debería haber uno llamado "sys.boot_completed".

Si escribe "getprop sys.boot_completed" responderá "1" si el sistema está iniciado y una cadena vacía si el sistema no se inicia.

+0

He encontrado al menos un dispositivo en el campo que no establece esa propiedad, pero si está presente y está configurado, entonces sabrá que su dispositivo está iniciado. También puede buscar dev.bootcomplete pero también he encontrado un dispositivo en el campo que tampoco lo establece. –

+0

Probé 'sys.boot_completed' contra' init.svc.bootanim' y encontró que 'sys.boot_completed' es el más conservador de los dos enfoques. Si tu emulador tiene la opción de verificar sys.boot_completed, úsalo. – Gi0rgi0s

13
while [ "`adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done 

Este código obtiene la información de sys.boot_completed si el arranque del sistema se ha completado, elimina un salto de línea y compara el valor resultante a 1. Si su desigual 1/no arranca completamente/se acaba de dormir 1 segundo y intenta de nuevo

Simplemente ponga su instalación de adb ... después de esta línea de código.

+0

gracias, lo he añadido – Sebo

+0

Esto me ha funcionado cuando estoy comprobando esto para un emulador Pero si quiero que esto compruebe el emulador múltiple, me da el error "más de un emulador". ¿Cómo resolverlo? –

+0

En este caso, debe especificar el dispositivo con el que desea usar el adb. En lugar de adb shell. Utilice adb -s DEVICE_IDENTIFIER. El DEVICE_IDENTIFIER es la identificación que está viendo cuando llama a dispositivos adb. Si quieres esperar a que todos los emuladores hayan comenzado. – Sebo

Cuestiones relacionadas