Android adb shell input 事件用法

本篇教學介紹如何在 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 按鍵碼則是 30

1
2
3
adb shell input keyevent 29
或者
adb shell input keyevent KEYCODE_A

如果要模擬按下 HOME 你可以下這 adb 指令,

1
2
3
adb shell input keyevent 3
或者
adb shell input keyevent KEYCODE_HOME

如果要模擬按下音量鍵變大聲,你可以下這 adb 指令,

1
2
3
adb 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
10
3  -> // 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
102
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" // 解鎖滑屏/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 系列文章可以看這篇