adb shell input的功能
adb shell input可以通过adb命令行发送input事件。包含keyevent和text两种。
keyevent
对于安卓API KeyEvent定义的健值均可支持
https://developer.android.com/reference/android/view/KeyEvent
健值举例:
KEYCODE_0
Added in API level 1
public static final int KEYCODE_0
Key code constant: '0' key.
Constant Value: 7 (0x00000007)
KEYCODE_1
Added in API level 1
public static final int KEYCODE_1
Key code constant: '1' key.
Constant Value: 8 (0x00000008)
KEYCODE_11
Added in API level 21
public static final int KEYCODE_11
Key code constant: '11' key.
Constant Value: 227 (0x000000e3)
KEYCODE_12
Added in API level 21
public static final int KEYCODE_12
Key code constant: '12' key.
Constant Value: 228 (0x000000e4)
KEYCODE_2
Added in API level 1
public static final int KEYCODE_2
Key code constant: '2' key.
Constant Value: 9 (0x00000009)
KEYCODE_3
Added in API level 1
public static final int KEYCODE_3
Key code constant: '3' key.
Constant Value: 10 (0x0000000a)
KEYCODE_3D_MODE
public static final int KEYCODE_3D_MODE
Key code constant: 3D Mode key. Toggles the display between 2D and 3D mode. * @apiSince 14
Constant Value: 206 (0x000000ce)
KEYCODE_4
Added in API level 1
public static final int KEYCODE_4
Key code constant: '4' key.
Constant Value: 11 (0x0000000b)
KEYCODE_5
Added in API level 1
public static final int KEYCODE_5
Key code constant: '5' key.
Constant Value: 12 (0x0000000c)
例如,发送一个back键:
通过查询上述文档,我们发现back键值为4,所以连通adb调试后,命令行输入:
adb shell input keyevent 4
手机端就会响应back键(如果当前页面可以响应back)。
text
也可以支持直接的文本输入,例如,在手机端打开一个可以响应文本输入的界面,例如EditText控件,命令行输入:
adb shell input text 123
手机端EditText会填充文本123。
支持文本单引号和双引号:
adb shell input text "123"
adb shell input text '123'
都是可以的。
adb shell input的实现机制
从分析log开始
通过命令行调试一个back键值:adb shell input keyevent 4,看到手机端有如下log:
一部分是AndroidRuntime的log:
12-12 16:32:57.324 9375 9375 D AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 2000 <<<<<<
12-12 16:32:57.329 9375 9375 D AndroidRuntime: CheckJNI is OFF
12-12 16:32:57.445 9375 9375 D AndroidRuntim