adb shell input keyevent和adb shell sendevent的基本区别是什么?我应该用哪一个来输入字符?传递给两个命令的键码是否相同?


当前回答

如果您想在多个设备连接时将文本发送到特定设备。首先使用adb设备查找附加设备

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

然后获取您的特定设备id并尝试以下操作

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

其他回答

如果您想在多个设备连接时将文本发送到特定设备。首先使用adb设备查找附加设备

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

然后获取您的特定设备id并尝试以下操作

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

通过adb shell输入keyevent,一个event_code或一个字符串将被发送到设备。

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

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"

sendevent实用程序发送触摸或键盘事件,以及用于模拟硬件事件的其他事件。详细信息请参考本文:Android,低级shell点击屏幕。

顺便说一下,如果你试图找到一种方法发送双引号到设备,尝试以下:

Adb shell输入文本“\”

我不确定为什么没有引用的事件代码,但这个解决方法可以工作。此外,如果你正在使用MonkeyDevice(或黑猩猩聊天),你应该在调用MonkeyDevice之前测试每个字符。输入,否则当你尝试发送时,你什么也得不到

向运行在android设备上的React-Native应用程序发送重载调用:adb shell input keyboard text "rr"

另外,如果您想用输入命令发送嵌入式空格,请使用%s

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

将产生

这是一个例子

被输入。

%本身不需要转义-只有特殊的%s对被特殊处理。这当然会导致一个明显的问题,即如何输入字符串%s,这必须使用两个单独的命令来完成。