web-dev-qa-db-fra.com

Événements d'entrée dans le shell ADB

Quelle est la différence fondamentale entre adb Shell input keyevent et adb Shell sendevent? Lequel dois-je utiliser pour saisir un caractère? Les codes clés sont-ils les mêmes que ceux que nous transmettons aux deux commandes?

198
KVR

Par adb Shell input keyevent, un event_code ou un string sera envoyé à l'appareil.

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

Voici quelques valeurs possibles pour event_code:

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"

L'utilitaire sendevent envoie des événements tactiles ou au clavier, ainsi que d'autres événements permettant de simuler les événements matériels. Reportez-vous à cet article pour plus de détails: Android, niveau inférieur Shell cliquez sur l'écran .

368
LionCoder

Mise à jour:

Utiliser adb Shell input:

Insérer du texte:

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

(obs:% s signifie ESPACE)

..

Codes d'événement:

adb Shell input keyevent 82

(82 ---> MENU_BUTTON)

"Pour plus de codes keyevents, voir la liste ci-dessous"

..

Tapez sur la position X, Y:

adb Shell input tap 500 1450

Pour trouver la position X, Y exacte que vous souhaitez Tapez sur, allez à:

Paramètres> Options pour les développeurs> Cochez l'option POINTER SLOCATION

..

Balayer X1 Y1 X2 Y2 [durée (ms)]:

adb Shell input swipe 100 500 100 1450 100

dans cet exemple, X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, Durée = 100ms

..

LongPress X Y:

adb Shell input swipe 100 500 100 500 250

nous utilisons la même commande pour un balayage pour émuler un appui long

dans cet exemple, X = 100, Y = 500, Durée = 250ms

..

Liste des codes d’événements mis à jour:

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 liste complète des commandes est disponible sur: http://developer.Android.com/reference/Android/view/KeyEvent.html

168
Rene Barbosa

De plus, si vous souhaitez envoyer des espaces incorporés avec la commande input, utilisez% s

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

va céder

this is an example 

être entré.

% lui-même n'a pas besoin d'être échappé - seule la paire spéciale %s est traitée de manière spécifique. Ceci conduit évidemment à la question évidente de savoir comment entrer la chaîne littérale %s... que vous auriez à faire avec deux commandes distinctes.

72
Fred Clift

À propos, si vous essayez de trouver un moyen d’envoyer des guillemets doubles à l’appareil, essayez ce qui suit:

texte d'entrée du shell adb '\ "'

Je ne sais pas pourquoi il n'y a pas de code d'événement pour les citations, mais cette solution de contournement fait le travail. De plus, si vous utilisez MonkeyDevice (ou ChimpChat), vous devez tester chaque caractère avant d'appeler monkeyDevice.type, sinon vous n'obtenez rien lorsque vous essayez d'envoyer "

12
H Ribeiro

Une autre différence:

  • " adb Shell input " appelle le fichier input.jar à traiter et à envoyer le code clé à partir de la couche Java du Android framework.
  • " adb sendevent " est en fait un code c (faisant partie de l'utilitaire de boîte à outils) qui envoie le code d'entrée directement dans le répertoire/dev/input .... de Linux sous-système d'entrée.

Vous trouverez plus de détails sur le code dans le cadre AOSP ici:

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

9
Y_Yen

J'ai écrit un script Powershell simple pour que les utilisateurs de Windows mappent les clés sur les événements d'entrée adb Shell. Et contrôlez un périphérique Android à distance via le réseau local. Je ne sais pas si quelqu'un le trouvera utile, mais je le partagerai quand même.

$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)
    }
}
5
Espen M. S.

Si vous souhaitez envoyer un texte à un périphérique spécifique lorsque plusieurs périphériques sont connectés. Commencez par rechercher les périphériques connectés à l’aide de périphériques adb

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

puis obtenez votre identifiant de périphérique spécifique et essayez ce qui suit

adb -s 31002d9e592b7300 Shell input text 'your text'
3
Karthik Bollisetti

Pour envoyer un appel de rechargement à une application React-Native s'exécutant sur un périphérique Android: adb Shell input keyboard text "rr"

1
MorenoMdz