Eventos de entrada de shell de ADB

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

Por adb shell input keyevent , se adb shell input keyevent un event_code o una string al dispositivo.

 usage: input [text|keyevent] input text  input keyevent  

Algunos valores posibles para event_code son:

 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" 

La utilidad sendevent 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 información: Android, bajo nivel de shell haga clic en la pantalla .

Actualización:

Usando la 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 —> MENU_BUTTON)

“Para ver más códigos de keyevents, consulte la lista a continuación”

..

Toca la posición X, Y:

 adb shell input tap 500 1450 

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

Configuraciones> Opciones de Desarrollador> Marque la opción PUNTAJE DEL PUNTERO

..

Deslizar X1 Y1 X2 Y2 [duración (ms)]:

 adb shell input swipe 100 500 100 1450 100 

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

..

LongPress XY:

 adb shell input swipe 100 500 100 500 250 

utilizamos el mismo comando para deslizar para emular una pulsación larga

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

..

Códigos de evento Lista actualizada:

 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

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

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

rendirá

 this is an example 

siendo entrada.

% no necesita escaparse, solo el par especial %s se trata especialmente. Esto conduce por supuesto a la pregunta obvia de cómo ingresar la cadena literal %s … que tendría que hacer con dos comandos separados.

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

adb shell input text ‘\ “‘

No estoy seguro de por qué no hay un código de evento para las cotizaciones, pero esta solución hace el trabajo. Además, si está usando MonkeyDevice (o ChimpChat) debe probar cada caracter antes de invocar monkeyDevice.type, de lo contrario no obtendrá nada cuando intente enviarlo ”

Otra diferencia:

  • adb shell input ” llama a input.jar para procesar y enviar el código clave de la capa Java de android framework.
  • adb sendevent ” es en realidad el código c (parte de la utilidad toolbox) que envía el código de entrada directamente al / dev / input …. del subsistema de entrada de Linux.

Puede encontrar más información detallada sobre el código dentro de AOSP Framework aquí:

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

Escribí un script simple de Powershell para que los usuarios de Windows mapeen las claves de los eventos de entrada del shell adb. 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) } } 

Si desea enviar un mensaje de texto a un dispositivo específico cuando hay varios dispositivos conectados. Primero busque los dispositivos conectados utilizando dispositivos adb

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

luego obtenga su ID de dispositivo específico y pruebe lo siguiente

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