Was ist der grundlegende Unterschied zwischen adb Shell input keyevent
und adb Shell sendevent
? Welches sollte ich zur Eingabe eines Zeichens verwenden? Sind die Schlüsselcodes die gleichen, die wir an beide Befehle übergeben?
Mit adb Shell input keyevent
wird entweder ein event_code
oder ein string
an das Gerät gesendet.
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
Einige mögliche Werte für event_code
sind:
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"
Das Dienstprogramm sendevent
sendet Berührungs- oder Tastaturereignisse sowie andere Ereignisse zum Simulieren der Hardwareereignisse. Weitere Informationen finden Sie in diesem Artikel: Android, Low-Level-Shell, klicken Sie auf den Bildschirm .
Aktualisierung:
adb Shell input
verwenden:
Text einfügen:
adb Shell input text "insert%syour%stext%shere"
(obs:% s bedeutet SPACE)
..
Ereigniscodes:
adb Shell input keyevent 82
(82 ---> MENU_BUTTON)
"Für weitere Schlüsselereignisse siehe Liste unten"
..
Tippen Sie auf die X, Y-Position:
adb Shell input tap 500 1450
Um die genaue X, Y-Position zu finden, die Sie antippen möchten, gehen Sie zu:
Einstellungen> Entwickleroptionen> Aktivieren Sie die Option POINTER SLOCATION
..
Streichen Sie X1 Y1 X2 Y2 [Dauer (ms)]:
adb Shell input swipe 100 500 100 1450 100
in diesem Beispiel ist X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, Dauer = 100 ms
..
X Y lang drücken:
adb Shell input swipe 100 500 100 500 250
wir verwenden den gleichen Befehl für ein Wischen, um ein langes Drücken zu emulieren
in diesem Beispiel ist X = 100, Y = 500, Dauer = 250 ms
..
Liste der aktualisierten Ereigniscodes:
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"
Die vollständige Liste der Befehle finden Sie unter: http://developer.Android.com/reference/Android/view/KeyEvent.html
Wenn Sie mit dem Eingabebefehl eingebettete Leerzeichen senden möchten, verwenden Sie% s
adb Shell input text 'this%sis%san%sexample'
wird nachgeben
this is an example
eingegeben werden.
%
selbst muss nicht maskiert werden - nur das spezielle %s
-Paar wird speziell behandelt. Dies führt natürlich zu der offensichtlichen Frage, wie die Literalzeichenfolge %s
... eingegeben werden soll, die Sie mit zwei separaten Befehlen ausführen müssten.
Übrigens, wenn Sie versuchen, doppelte Anführungszeichen an das Gerät zu senden, versuchen Sie Folgendes:
adb Shell-Eingabetext '\ "'
Ich bin nicht sicher, warum es keinen Ereigniscode für Anführungszeichen gibt, aber diese Problemumgehung erledigt den Job. Wenn Sie MonkeyDevice (oder ChimpChat) verwenden, sollten Sie jedes Zeichen testen, bevor Sie monkeyDevice.type aufrufen.
Ein weiterer Unterschied:
Weitere Informationen zum Code-Trace in AOSP Framework finden Sie hier:
http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_Shell_input_Code_Trace.html#RefId=7c8f5285
Ich habe ein einfaches Powershell-Skript für Windows-Benutzer geschrieben, um Schlüssel zu ADB-Shell-Eingabeereignissen zuzuordnen. Und steuern Sie ein Android Gerät aus der Ferne über LAN. Ich weiß nicht, ob jemand es nützlich findet, aber ich werde es trotzdem teilen.
$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)
}
}
Wenn Sie einen Text an ein bestimmtes Gerät senden möchten, wenn mehrere Geräte verbunden sind. Suchen Sie zuerst mit adb devices nach den angeschlossenen Geräten
adb devices
List of devices attached
3004e25a57192200 device
31002d9e592b7300 device
holen Sie sich dann Ihre spezifische Geräte-ID und versuchen Sie Folgendes
adb -s 31002d9e592b7300 Shell input text 'your text'
So senden Sie einen Reload-Aufruf an eine React-Native-App, die auf einem Android Gerät ausgeführt wird: adb Shell input keyboard text "rr"