¿Cómo adb esperar por dispositivo hasta que aparezca la pantalla de inicio?

Necesito desbloquear mi pantalla usando adb, y la espera del dispositivo sale demasiado pronto (cuando el dispositivo se está iniciando) y falla el desbloqueo de la pantalla. ¿Hay alguna manera de detectar que la pantalla de inicio, entonces puedo activar el desbloqueo de la pantalla?

Este es el comando que estoy usando para desbloquear la pantalla:

adb wait-for-device shell input keyevent 82

Respuestas (3)

bueno, espere por dispositivo, como ya se dio cuenta, solo espera hasta que el demonio adb se inicie correctamente. Esto ya está en tiempo de inicio. Para verificar un arranque completo, no puede agregar a su secuencia de comandos algo como:

en pseudo:

  1. esperar por dispositivo
  2. siempre y cuando getprop sys.boot_completed! = 1 sueño algunos segundos verifique getprop sys.boot_completed nuevamente
  3. evento clave de entrada de shell 82

Esto debería funcionar.

Algo como esto:

#!/bin/bash

adb wait-for-device

A=$(adb shell getprop sys.boot_completed | tr -d '\r')

while [ "$A" != "1" ]; do
        sleep 2
        A=$(adb shell getprop sys.boot_completed | tr -d '\r')
done

adb shell input keyevent 82

Esto no está probado, así que tenga cuidado con los posibles errores.

Edite su respuesta para que sea fácilmente legible. Tienes una respuesta válida, pero un poco de claridad ayudaría a todos. Gracias
La respuesta ahora está editada. Espero que esto te ayude :)
buena respuesta +1, ahora otros podrán seguirla. No olvides agregar " Siempre realizar una copia de seguridad ", para esos momentos accidentales;)
Descubrí que el resultado de getproptenía un retorno de carro después, así que cambiar el adbcomando a $(adb shell getprop sys.boot_completed | tr -d '\r')funcionó. Esto es solo recortar el carácter de retorno de carro.
@ dividido por cero, modifique su respuesta para incluir el recorte mencionado por CoatedMoose. Umang, acéptalo también como respuesta.
se agrega el recorte. Gracias CoatedMoose
¿Cómo modificaría esto si hay más de un dispositivo/emulador en ejecución?

Esta es una pregunta antigua y está fuera de tema, pero aquí se explica cómo hacerlo en una sola línea:

adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; input keyevent 82'

Esto es lo que se me ocurrió:

adb wait-for-device shell <<ENDSCRIPT
echo -n "Waiting for device to boot "
echo "" > /data/local/tmp/zero
getprop dev.bootcomplete > /data/local/tmp/bootcomplete
while cmp /data/local/tmp/zero /data/local/tmp/bootcomplete; do 
{
    echo -n "."
    sleep 1
    getprop dev.bootcomplete > /data/local/tmp/bootcomplete
}; done
echo "Booted."
exit
ENDSCRIPT

echo "Waiting 30 secs for us to be really booted"
sleep 30

echo "Unlocking screen"
adb shell "input keyevent 82"