" adb shell输入文字"模拟软件键盘输入?

时间:2014-09-11 08:01:18

标签: android adb android-virtual-keyboard

adb shell input text "sometext"

OR

adb shell input keyevent eventid

分别模拟虚拟/硬件键盘的实际输入吗?

我在developer.android.com /

上找不到这些命令的任何文档

这些命令是否有可靠的文档?

5 个答案:

答案 0 :(得分:5)

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)

所以看起来“text”确实是虚拟的(默认:触摸屏)和物理的keyevent(默认:键盘)。

您可以覆盖文本输入设备 - adb shell input keyboard text "foo"工作正常。但是,您无法从屏幕上发送原始密钥代码。

答案 1 :(得分:2)

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

即可
adb shell input help

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

答案 2 :(得分:1)

有关

adb shell input text "some\ text"

我只找到源代码: 例如为Android 8.1 here

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

并搜索我发现a description here for heading "Virtual Key Character Map File"的先前方法中使用的KeyCharacterMap.VIRTUAL_KEYBOARD

从该信息中,我研究了旧的SM-G900F。我在/system/usr/keychars/Virtual.kcm下找到了。 在该文件的内部,它将按键事件映射到最常见的字符(主要是ASCII)。

所以对你的问题:

  

执行这些操作以模拟来自虚拟/硬件键盘的实际输入   分别是?

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

根据我的经验,所有未知字符都会导致整个文本被取消。 而且您必须转义一些字符-sometimes space with %s, or with '\ ', other special characters like & have to be escaped too.

在某些设备上,我发现用adb shell input text "<longText>"书写的长文本(约200个字符)部分丢失了-甚至结尾部分更大! 在我看来,取决于制造商。

答案 3 :(得分:0)

我正在开发一项评估不同键盘之间的性能并尝试模拟实际用户键盘键入的作品。我正在使用的工具(Android View客户端)使用输入文本将文本发送到设备。但是,当使用此工具模拟文本输入时,我观察到由于使用此输入法而导致键盘行为的差异。

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

答案 4 :(得分:-1)

“ adb shell输入keyevent eventid”肯定不会模拟真实的keyevent,因为设备ID == 0。

“ adb shell输入文本“ sometext””到底是不是虚幻的……所以我想它会像在软键盘上敲击一样吗?