Qual é a diferença básica entre adb shell input keyevent
e adb shell sendevent
? Qual devo usar para inserir um caractere? Os códigos de chave são os mesmos que passamos para os dois comandos?
222
Por adb shell input keyevent
, um event_code
ou um string
será enviado para o dispositivo.
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
Alguns valores possíveis para event_code
são:
0 --> "KEYCODE_UNKNOWN"
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3"
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"
O sendevent
utilitário envia eventos de toque ou teclado, bem como outros eventos para simular os eventos de hardware. Consulte este artigo para obter detalhes: Android, clique em shell de baixo nível na tela .
>adb shell input text "a b"
mas não trabalho.Atualizando:
Usando
adb shell input
:..
..
..
..
..
fonte
adb shell input swipe 200 800 200 400 200
Além disso, se você desejar enviar espaços incorporados com o comando de entrada, use% s
vai render
sendo entrada.
%
ele próprio não precisa escapar - apenas o%s
par especial é tratado especialmente. É claro que isso leva à pergunta óbvia de como inserir a string literal%s
... o que você faria com dois comandos separados.fonte
atext "Hey, I'm here"
e funciona.A propósito, se você estiver tentando encontrar uma maneira de enviar aspas duplas para o dispositivo, tente o seguinte:
Não sei por que não há código de evento para aspas, mas essa solução alternativa faz o trabalho. Além disso, se você estiver usando o MonkeyDevice (ou ChimpChat), deverá testar cada caractere antes de chamar monkeyDevice.type, caso contrário, você não receberá nada ao tentar enviar "
fonte
atext "Hey, I'm here"
e funciona.Outra diferença:
Um rastreamento de código mais detalhado no AOSP Framework pode ser encontrado aqui:
http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html#RefId=7c8f5285
fonte
Eu escrevi um script simples do Powershell para usuários do Windows para mapear chaves para eventos de entrada de shell adb. E controle um dispositivo Android remotamente pela LAN. Não sei se alguém acha útil, mas vou compartilhar de qualquer maneira.
fonte
Se você deseja enviar um texto para um dispositivo específico quando vários dispositivos estiverem conectados. Primeiro, procure os dispositivos conectados usando dispositivos adb
obtenha seu ID de dispositivo específico e tente o seguinte
fonte
Para enviar uma chamada de recarga para um aplicativo React-Native em execução em um dispositivo Android:
adb shell input keyboard text "rr"
fonte