adb shell input text "sometext"
或
adb shell input keyevent eventid
这些是否分别模拟来自虚拟/硬件键盘的实际输入?
我没有在 developer.android.com/上找到这些命令的任何文档
这些命令是否有任何受信任的文档?
adb shell input help
生成(在一长串输入设备之后(:
The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
因此,似乎"文本"确实用于虚拟(默认:触摸屏(和用于物理(默认:键盘(的键事件。
您可以覆盖文本输入设备 - adb shell input keyboard text "foo"
工作正常。但是,您无法从屏幕发送原始键码。
相关
adb shell input text "some text"
我只找到源代码:例如,此处适用于安卓 8.1。
方法private void sendText(int source, String text) {
与编码相关。
搜索以前方法中使用的KeyCharacterMap.VIRTUAL_KEYBOARD
,我在这里找到了标题"虚拟键字符映射文件"的描述。
从这些信息中,我查看了旧的SM-G900F。我在/system/usr/keychars/Virtual.kcm
下找到了.在该文件内部,它将关键事件映射到最常见的字符(大多数只有 ASCII(。
所以对于你的问题:
这些是否模拟来自虚拟/硬件键盘的实际输入 分别?
是的,代码获取文本并尝试通过KeyCharacterMap.VIRTUAL_KEYBOARD将其映射回关键事件并发送它们。
根据我的经验,所有未知字符都会导致整个文本的取消。而且你必须转义一些字符 - 有时带有 %s 的空格,或者带有 '\',其他特殊字符,如 &也必须转义。
在某些设备上,我体验到用adb shell input text "<longText>"
写的长文本(大约 200 个字符(部分丢失 - 甚至在最后丢失了大部分!在我看来,这取决于制造商。
adb shell input *
命令有一个很好的描述,只需键入
adb shell input help
对于adb shell keyevent
命令,可以使用不同的键码。
我正在开发一项工作,评估不同键盘之间的性能,并尝试模拟真实用户的键盘键入。我正在使用的工具(android 视图客户端(使用输入文本将文本发送到设备。但是,当使用此工具模拟文本输入时,我观察到键盘的行为存在差异,这是由于使用此输入法而导致的。
使用输入文本时,指针位置不会更改,键盘也不会显示任何按键动画。相反,当使用输入点击 X Y 按下某个键时,视觉行为与真实用户点击该键相同。此外,两种输入法的 GBoard 行为也不同。使用输入文本,然后点击建议的字词时,键盘不会添加尾随空格。使用输入抽头时不会发生同样的情况。这有助于得出结论,这两种输入方法之间确实存在差异。
"adb shell 输入键事件事件 EventID"肯定不会将真实的键事件模拟为设备 ID == 0。
那么"adb shell 输入文本"一些文本"呢? 无论如何,它不是来自 pysical ...所以我想它会像软键盘上一样叮叮当当