como adb esperar pelo dispositivo até a tela inicial aparecer?


18

Preciso desbloquear minha tela usando adb, e a espera pelo dispositivo sai muito cedo (quando o dispositivo está sendo inicializado), e o desbloqueio da tela falha. Existe uma maneira de detectar que a tela inicial, para que eu possa disparar o desbloqueio da tela?

Este é o comando que estou usando para desbloquear a tela -

adb wait-for-device shell input keyevent 82

Respostas:


23

bem, espere pelo dispositivo, como você já percebeu, aguarda apenas até o daemon adb ser iniciado corretamente. Isso já está no tempo de inicialização. Para verificar uma inicialização completa, você não pode adicionar ao seu script algo como:

em pseudo:

  1. esperar pelo dispositivo
  2. contanto que getprop sys.boot_completed! = 1 durma alguns segundos, verifique getprop sys.boot_completed novamente
  3. evento de chave de entrada do shell 82

Isso deve funcionar.

Algo assim:

#!/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

Isso não foi testado, portanto, esteja ciente de possíveis erros


Edite sua resposta para ser facilmente legível. Você tem uma resposta válida, mas um pouco de clareza ajudaria a todos. Obrigado
HasH_BrowN

agora a resposta é editada. Espero que isso ajude você :)
divididos por zero

boa resposta +1, agora outros poderão segui-la. Não se esqueça de adicionar " Sempre faça uma cópia de segurança ", para aqueles momentos acidentais;)
HasH_BrowN

2
Eu achei que o resultado getpropteve um retorno de carro depois dele, então alterei o adbcomando para $(adb shell getprop sys.boot_completed | tr -d '\r')fazer o truque. Isso está apenas aparando o caractere de retorno de carro.
precisa saber é o seguinte

@ dividido por zero, modifique sua resposta para incluir o corte mencionado pelo CoatedMoose. Por favor, aceite-o como resposta também.
Jayshil Dave

9

Esta é uma pergunta antiga e está fora do tópico, mas aqui está como fazer isso em uma única linha:

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

0

Aqui está o que eu vim com:

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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.