本篇教學介紹如何在 Android 下使用 adb shell input 指令,adb shell input 最常用到 keyevent,可以很方便地模擬按鍵輸入,讓開發除錯或自動化測試上變得方便許多。
以下 adb shell input 內容大概分為這幾部分,
- adb shell input keyevent 模擬按鍵
- adb shell input keyevent 常用的 keycode 值
- adb shell input keyevent 完整的 keycode 值
- adb shell input text 模擬輸入文字
- adb shell input tap 模擬觸控螢幕
- adb shell input swipe 模擬滑動螢幕
adb 指令的安裝方式可以參考這篇。
那我們開始吧!
adb shell input keyevent 模擬按鍵
如果要模擬 A
按鍵你可以下這 adb 指令, B
按鍵碼則是 301
2
3adb shell input keyevent 29
或者
adb shell input keyevent KEYCODE_A
如果要模擬按下 HOME 你可以下這 adb 指令,1
2
3adb shell input keyevent 3
或者
adb shell input keyevent KEYCODE_HOME
如果要模擬按下音量鍵變大聲,你可以下這 adb 指令,1
2
3adb shell input keyevent 24
或者
adb shell input keyevent KEYCODE_VOLUME_UP
adb shell input keyevent 常用的 keycode 值
這邊整理 input keyevent 常用的 keycode 值,1
2
3
4
5
6
7
8
9
103 -> // Home 回到主畫面
4 -> // Back 返回
19 -> // Up 上
20 -> // Down 下
21 -> // Left 左
22 -> // Right 右
23 -> // Select/Ok 確定選取
24 -> // Volume Up 音量上
25 -> // Volume Down 音量下
82 -> // Menu 選單
adb shell input keyevent 完整的 keycode 值
這邊列出所有的 keyevent 跟對應的 key code,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
1020 -> "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" // 解鎖滑屏/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"
126 -> "KEYCODE_MEDIA_PLAY" // 多媒體鍵 播放
127 -> "KEYCODE_MEDIA_PAUSE" // 多媒體鍵 暫停
...
187 -> "KEYCODE_APP_SWITCH" // 所有任務視窗
更完整的列表可以查詢 android 開發者網站的 KeyEvent
adb shell input text 模擬輸入文字
這邊介紹 adb shell input text 模擬輸入文字,如果要模擬輸入 android
字串的話,可以下這 adb 指令,1
adb shell input text "android"
adb shell input tap 模擬觸控螢幕
這邊介紹 adb shell input tap 模擬觸控螢幕,例如模擬觸控點擊(600,800)位置,其中X座標是600,Y座標是800,1
adb shell input tap 600 800
adb shell input swipe 模擬滑動螢幕
這邊介紹 adb shell input swipe 模擬滑動螢幕,例如模擬在螢幕上從(600,800)向左滑動到(300,800),就會看到畫面右滑動,1
adb shell input swipe 600 800 300 800
完整的用法為 input swipe <x1> <y1> <x2> <y2> [duration(ms)]
。
要模擬長按的話,在最後多加一個參數,例如 250 表示長按 250 ms。
其他參考
android - ADB Shell Input Events - Stack Overflow
https://stackoverflow.com/questions/7789826/adb-shell-input-events
[android-developers] Re: correct usage of “adb shell input”
https://www.mail-archive.com/android-developers@googlegroups.com/msg14587.html
adb shell 命令整理 | IT人
https://iter01.com/476261.html
adb shell input keyevent 控制按鍵輸入的數值
https://www.796t.com/content/1549161557.html
其他技巧推薦
如果你是常常在Android adb shell下做事情的話,尤其是需要使用到vi,建議安裝busybox,使用busybox附帶的vi會方便很多,
如果還想知道busybox支援哪些指令或busybox基本用法的話請看這篇。
其他的 Android 系列文章可以看這篇。