Eventos de entrada de shell ADB

9 minutos de lectura

Eventos de entrada de shell ADB
KVR

¿Cuál es la diferencia básica entre adb shell input keyevent y adb shell sendevent? ¿Cuál debo usar para ingresar un carácter? ¿Son los códigos clave los mismos que pasamos a ambos comandos?

1646750948 602 Eventos de entrada de shell ADB
LionCoder

Por adb shell input keyeventya sea un event_code o un string se enviará al dispositivo.

usage: input [text|keyevent]
  input text <string>
  input keyevent <event_code>

Algunos posibles valores de event_code están:

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"

los sendevent La utilidad envía eventos táctiles o de teclado, así como otros eventos para simular los eventos de hardware. Consulte este artículo para obtener más detalles: Android, shell de bajo nivel, haga clic en la pantalla.

  • ¡Hola @chwentong! ¿Puede ayudarme señalando cualquier lugar que explique “texto de entrada ” de manera más detallada? No puedo encontrar nada al respecto, similar a desarrollador.android.com/reference/android/view/KeyEvent.html ¡Gracias!

    – stansult

    3 de julio de 2012 a las 0:14

  • ¡Hola! ¿Puedo preguntar cómo puedo ingresar la cadena que contiene espacio en una consola de línea de comandos de Windows? trato de entrar >adb shell input text "a b" pero no trabajo.

    -Wei Yang

    8 de agosto de 2013 a las 22:45

  • ¿De dónde sacaste la información del comando “input”? qué otras características están ocultas en la documentación (aquí: desarrollador.android.com/tools/help/adb.html ) ?

    – desarrollador de Android

    1 de marzo de 2014 a las 23:16

  • @WeiYang, intente esto, >texto de entrada de shell adb “a%sb”

    – Natán Lotério

    12 de febrero de 2015 a las 12:41

  • Esta publicación fue muy útil cuando la pantalla de mi tableta Android se rompió y no respondía a los toques. Pude “escribir” el pin usando adb shell input keyevent y encontrar mi camino. ¡Gracias!

    – j0aqu1n

    26 de marzo de 2015 a las 13:59

Eventos de entrada de shell ADB
René Barbosa

Actualizando:

Utilizando adb shell input:

Insertar texto:

adb shell input text "insert%syour%stext%shere"

(obs: %s significa ESPACIO)

..

Códigos de evento:

adb shell input keyevent 82

(82 —> BOTÓN_MENÚ)

“Para obtener más códigos de eventos clave, consulte la lista a continuación”

..

Toque la posición X, Y:

adb shell input tap 500 1450

Para encontrar la posición X,Y exacta que desea tocar, vaya a:

Ajustes > Opciones de desarrollador > Marque la opción SITUACIÓN DEL PUNTERO

..

Deslizar X1 Y1 X2 Y2 [duration(ms)]:

adb shell input swipe 100 500 100 1450 100

en este ejemplo X1=100, Y1=500, X2=100, Y2=1450, Duración = 100ms

..

Pulsación larga XY:

adb shell input swipe 100 500 100 500 250

utilizamos el mismo comando para un deslizamiento para emular una pulsación larga

en este ejemplo X=100, Y=500, Duración = 250ms

..

Lista actualizada de códigos de eventos:

0 -->  "KEYCODE_0" 
1 -->  "KEYCODE_SOFT_LEFT" 
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 -->  "KEYCODE_MEDIA_PLAY_PAUSE"
86 -->  "KEYCODE_MEDIA_STOP"
87 -->  "KEYCODE_MEDIA_NEXT"
88 -->  "KEYCODE_MEDIA_PREVIOUS"
89 -->  "KEYCODE_MEDIA_REWIND"
90 -->  "KEYCODE_MEDIA_FAST_FORWARD"
91 -->  "KEYCODE_MUTE"
92 -->  "KEYCODE_PAGE_UP"
93 -->  "KEYCODE_PAGE_DOWN"
94 -->  "KEYCODE_PICTSYMBOLS"
...
122 -->  "KEYCODE_MOVE_HOME"
123 -->  "KEYCODE_MOVE_END"

La lista completa de comandos se puede encontrar en:
http://developer.android.com/reference/android/view/KeyEvent.html

  • Esta lista es obviamente más larga para versiones posteriores de Android, por ejemplo para 4.2.2 podemos encontrarlos en android.view.KeyEvent.javadonde suman hasta 219.

    – no2qubit

    14/03/2015 a las 20:45

  • Gracias por el comando deslizar, lo estaba buscando mucho.

    – David

    17 oct 2016 a las 14:17

  • En las opciones de desarrollador, habilite “Ubicación del puntero” para determinar las coordenadas correctas al ingresar eventos táctiles.

    – Dick Lucas

    18 de noviembre de 2016 a las 15:37

  • Solo para información adicional. ¡Deslizar solo funcionó en mi teléfono si el tiempo era mayor a 120! adb shell input swipe 200 800 200 400 200

    – Hozeis

    16 de noviembre de 2018 a las 12:56


  • adb shell input keyevent KEYCODE_HOME también funciona

    – Alejandro Haroldo da Rocha

    14 de diciembre de 2020 a las 9:45

1646750950 579 Eventos de entrada de shell ADB
fred clift

Además, si desea enviar espacios incrustados con el comando de entrada, use %s

adb shell input text 'this%sis%san%sexample'   

rendirá

esto es un ejemplo

siendo entrada.

% en sí mismo no necesita escapar – sólo el especial %s par es tratado especialmente. Esto lleva, por supuesto, a la pregunta obvia de cómo ingresar la cadena literal %sque tendría que hacer con dos comandos separados.

  • ¿Alguna forma de desactivar la corrección automática aquí? De lo contrario funciona muy bien 🙂

    – Patrick Boos

    6 de enero de 2014 a las 11:14

  • Aquí hay un script bash simple para encargarse de escapar, por lo que solo puede decir atext "Hey, I'm here" y funciona.

    – Dan Dascalescu

    15 de octubre de 2017 a las 4:05

  • ¿Sabes quizás si es posible escribir unicode? O es solo ascii?

    – desarrollador de Android

    22 de noviembre de 2021 a las 21:15

Por cierto, si está tratando de encontrar una forma de enviar comillas dobles al dispositivo, intente lo siguiente:

texto de entrada de shell adb ‘\”‘

No estoy seguro de por qué no hay un código de evento para las comillas, pero esta solución funciona. Además, si está utilizando MonkeyDevice (o ChimpChat), debe probar cada carácter antes de invocar monkeyDevice.type, de lo contrario, no obtendrá nada cuando intente enviar “

1646750950 585 Eventos de entrada de shell ADB
Espen EM

Escribí un sencillo script de Powershell para que los usuarios de Windows asignaran claves a eventos de entrada de adb shell. Y controle un dispositivo Android de forma remota a través de LAN. No sé si alguien lo encuentra útil, pero lo compartiré de todos modos.

$ip = 192.168.1.8
cd D:\Android\android-sdk-windows\platform-tools\; .\adb.exe disconnect $ip; .\adb.exe connect $ip
$adbKeyNum = @{LeftWindows = "1"; F1 = "3"; Enter = "66"; UpArrow = "19"; DownArrow = "20"; LeftArrow = "21"; RightArrow = "22"; Add = "24";
        Subtract = "25"; Backspace = "4"; P = "26"}

while(1 -eq 1){
    $keyPress = [Console]::ReadKey($true).Key
    if ([string]$keyPress -eq "F10"){
        .\adb.exe disconnect $ip
        exit
    }
    elseif ([string]$keyPress -eq "F6"){
        $string = Read-Host -Prompt 'Input the string: '
        .\adb.exe shell input text $string
    }
    elseif ($adbKeyNum.ContainsKey([string]$keyPress)){
        echo $adbKeyNum.Get_Item([string]$keyPress)
        .\adb.exe shell input keyevent $adbKeyNum.Get_Item([string]$keyPress)
    }
}

1646750950 579 Eventos de entrada de shell ADB
Y_Yen

Otra diferencia:

  • entrada de shell adb” está llamando a input.jar para procesar y enviar el código clave desde la capa Java del marco de Android.
  • evento de envío adb” es en realidad un código c (parte de la utilidad de la caja de herramientas) que envía el código de entrada directamente a /dev/input…. del subsistema de entrada de Linux.

Puede encontrar más detalles sobre el seguimiento del código en el marco AOSP aquí:

http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html#RefId=7c8f5285

1646750951 185 Eventos de entrada de shell ADB
Karthik Bollisetti

Si desea enviar un texto a un dispositivo específico cuando se conectan varios dispositivos. Primero busque los dispositivos conectados usando dispositivos adb

adb devices
List of devices attached
3004e25a57192200        device
31002d9e592b7300        device

luego obtenga la identificación de su dispositivo específico e intente lo siguiente

adb -s 31002d9e592b7300 shell input text 'your text'

  • Debería ser tu%texto

    – royatirek

    31 de octubre de 2018 a las 12:34

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad