15
adb shell input text "sometext"

或者

adb shell input keyevent eventid

这些是否分别模拟来自虚拟/硬件键盘的实际输入?

我在 developer.android.com/ 上没有找到这些命令的任何文档

这些命令是否有任何受信任的文档?

4

5 回答 5

7

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"工作得很好。但是,您不能从屏幕发送原始键码。

于 2016-06-10T17:58:57.903 回答
4

相关

adb shell input text "some\ text"

我只找到源代码:例如。Android 8.1 在这里

该方法 private void sendText(int source, String text) {与编码相关。

KeyCharacterMap.VIRTUAL_KEYBOARD并且在以前的方法中使用了它的搜索,我在这里找到了标题 "Virtual Key Character Map File" 的描述

根据该信息,我查看了旧的 SM-G900F。我在/system/usr/keychars/Virtual.kcm. 在该文件内部,它将关键事件映射到最常见的字符(大多数只有 ASCII)。

所以对于你的问题:

这些是否分别模拟来自虚拟/硬件键盘的实际输入?

的,代码获取文本并尝试通过 KeyCharacterMap.VIRTUAL_KEYBOARD 将其映射回关键事件并发送它们。

根据我的经验,所有未知字符都会导致整个文本被取消。您必须转义一些字符 -有时使用 %s 或 '\' 空格,其他特殊字符(如 &)也必须转义。

在某些设备上,我体验到一段长文本(约 200 个字符)adb shell input text "<longText>"部分丢失了——甚至在最后丢失了更大的部分!在我看来,这取决于制造商。

于 2019-02-13T22:57:09.857 回答
2

命令有一个很好的描述adb shell input *,只需键入

adb shell input help

对于adb shell keyevent命令,可以使用不同的键码

于 2014-09-18T10:51:51.683 回答
0

我正在开发一项评估不同键盘性能并尝试模拟真实用户键盘输入的工作。我正在使用的工具(android 视图客户端)使用输入文本将文本发送到设备。然而,当使用这个工具模拟文本输入时,我观察到了键盘行为的差异,这是由使用这种输入法引起的。

使用input text,指针位置不会改变,键盘也不会显示任何按键动画。相反,当使用input tap XY按键时,视觉行为与真实用户点击按键相同。此外,两种输入法的 GBoard 行为也不同。使用输入文本然后点击建议的单词时,键盘不会添加尾随空格。使用input tap时不会发生同样的情况。这有助于得出结论,这两种输入法之间确实存在差异。

于 2020-01-06T15:37:30.023 回答
-1

“adb shell input keyevent eventid”肯定不会模拟真正的keyevent,因为设备id == 0。

“adb shell input text”sometext“”怎么样?无论如何它不是来自pysical ...所以我想它会像在softkeyboard上点击一样?

于 2019-09-11T10:20:15.873 回答