อะไรคือความแตกต่างพื้นฐานระหว่างadb shell input keyevent
และadb shell sendevent
? ฉันควรใช้อันไหนในการป้อนตัวละคร? เป็นรหัสเดียวกันกับที่เราส่งให้ทั้งสองคำสั่งหรือไม่?
อะไรคือความแตกต่างพื้นฐานระหว่างadb shell input keyevent
และadb shell sendevent
? ฉันควรใช้อันไหนในการป้อนตัวละคร? เป็นรหัสเดียวกันกับที่เราส่งให้ทั้งสองคำสั่งหรือไม่?
คำตอบ:
โดยadb shell input keyevent
, ทั้งevent_code
หรือstring
จะถูกส่งไปยังอุปกรณ์
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, ระดับต่ำเปลือกคลิกบนหน้าจอ
>adb shell input text "a b"
แต่ไม่ทำงาน
ปรับปรุง:
การใช้adb shell input
:
แทรกข้อความ:
adb shell input text "insert%syour%stext%shere"
(obs:% s หมายถึง SPACE)
..
รหัสเหตุการณ์:
adb shell input keyevent 82
(82 ---> MENU_BUTTON)
"สำหรับรหัสของคีย์เพิ่มเติมโปรดดูรายการด้านล่าง"
..
แตะตำแหน่ง X, Y:
adb shell input tap 500 1450
ในการค้นหาตำแหน่ง X, Y ที่แน่นอนที่คุณต้องการแตะไปที่:
การตั้งค่า> ตัวเลือกสำหรับนักพัฒนา> ตรวจสอบตัวเลือก POINTER SLOCATION
..
ปัด X1 Y1 X2 Y2 [ระยะเวลา (มิลลิวินาที)]:
adb shell input swipe 100 500 100 1450 100
ในตัวอย่างนี้ X1 = 100, Y1 = 500, X2 = 100, Y2 = 1450, ระยะเวลา = 100ms
..
LongPress XY:
adb shell input swipe 100 500 100 500 250
เราใช้คำสั่งเดียวกันสำหรับการกวาดนิ้วเพื่อเลียนแบบการกดแบบยาว
ในตัวอย่างนี้ X = 100, Y = 500, Duration = 250ms
..
รายการที่อัปเดตรหัสเหตุการณ์:
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"
รายการคำสั่งทั้งหมดสามารถดูได้ที่: http://developer.android.com/reference/android/view/KeyEvent.html
adb shell input swipe 200 800 200 400 200
นอกจากนี้หากคุณต้องการส่งช่องว่างในตัวด้วยคำสั่งอินพุตให้ใช้% s
adb shell input text 'this%sis%san%sexample'
จะให้ผลผลิต
this is an example
กำลังป้อนข้อมูล
%
ตัวเองไม่จำเป็นต้องหลบหนี - มีเพียง%s
คู่พิเศษเท่านั้นที่ได้รับการดูแลเป็นพิเศษ นี่นำไปสู่คำถามที่ชัดเจนเกี่ยวกับวิธีป้อนสตริงตัวอักษร%s
... ซึ่งคุณต้องทำด้วยสองคำสั่งแยกกัน
atext "Hey, I'm here"
และใช้งานได้
ถ้าคุณพยายามหาวิธีส่งคำพูดสองครั้งไปยังอุปกรณ์ให้ลองทำดังนี้
ข้อความอินพุตเชลล์ adb '\ "'
ฉันไม่แน่ใจว่าทำไมไม่มีรหัสเหตุการณ์สำหรับคำพูด แต่วิธีแก้ปัญหานี้ทำงาน นอกจากนี้หากคุณกำลังใช้ MonkeyDevice (หรือ ChimpChat) คุณควรทดสอบ caracter แต่ละตัวก่อนที่จะเรียกใช้ monkeyDevice.type มิฉะนั้นคุณจะไม่ได้อะไรเลยเมื่อพยายามส่ง "
atext "Hey, I'm here"
และใช้งานได้
ความแตกต่างอื่น ๆ หนึ่ง:
ดูรายละเอียดเพิ่มเติมของรหัสติดตามลงใน AOSP Framework ได้ที่นี่:
http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html#RefId=7c8f5285
ฉันเขียนสคริปต์ Powershell แบบง่าย ๆ สำหรับผู้ใช้ windows ในการแมปคีย์เพื่อป้อนกิจกรรมเชลล์ adb และควบคุมอุปกรณ์ Android จากระยะไกลผ่าน LAN ฉันไม่ทราบว่ามีใครพบว่ามันมีประโยชน์หรือไม่ แต่ฉันจะแบ่งปันต่อไป
$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)
}
}
หากคุณต้องการส่งข้อความไปยังอุปกรณ์เฉพาะเมื่อเชื่อมต่ออุปกรณ์หลายเครื่อง ขั้นแรกให้ค้นหาอุปกรณ์ที่เชื่อมต่อโดยใช้อุปกรณ์ adb
adb devices
List of devices attached
3004e25a57192200 device
31002d9e592b7300 device
จากนั้นรับรหัสอุปกรณ์เฉพาะของคุณและลองทำสิ่งต่อไปนี้
adb -s 31002d9e592b7300 shell input text 'your text'
ในการส่งการโทรซ้ำไปยังแอป React-Native ที่ทำงานในอุปกรณ์ Android: adb shell input keyboard text "rr"