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?
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 .
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
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.
À 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 "
Une autre différence:
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
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)
}
}
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'
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"