wake-up-neo.com

ADB-Shell-Eingabeereignisse

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?

198
KVR

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 .

368
LionCoder

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

168
Rene Barbosa

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.

72
Fred Clift

Ü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.

12
H Ribeiro

Ein weiterer Unterschied:

  • " adb Shell input " ruft die Datei input.jar auf, um den Schlüsselcode von der Ebene Java der Ebene Android Framework.
  • " adb sendevent " ist eigentlich c-Code (Teil des Toolbox-Dienstprogramms), der den Eingabecode direkt in/dev/input .... von Linux sendet Eingabesubsystem.

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

9
Y_Yen

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

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'
3

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"

1
MorenoMdz