"adb shell输入文本"是否模拟软件键盘输入?

l'-*_*-'l 10 android adb android-virtual-keyboard

adb shell input text "sometext"
Run Code Online (Sandbox Code Playgroud)

要么

adb shell input keyevent eventid
Run Code Online (Sandbox Code Playgroud)

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

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

这些命令有可靠的文档吗?

SF.*_*SF. 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)
Run Code Online (Sandbox Code Playgroud)

因此,似乎“文本”确实是虚拟的(默认:触摸屏),而按键事件是物理的(默认:键盘)。

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


Bit*_*her 5

相关

adb shell input text "some\ text"
Run Code Online (Sandbox Code Playgroud)

我只找到源代码:E.g. 适用于Android 8.1 此处

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

并搜索KeyCharacterMap.VIRTUAL_KEYBOARD之前的方法中使用的内容,我在这里找到了标题“虚拟按键字符映射文件”的描述

根据这些信息,我研究了一台旧的 SM-G900F。我发现下/system/usr/keychars/Virtual.kcm。在该文件内部,它将关键事件映射到最常见的字符(主要是 ASCII)。

所以对于你的问题:

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

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

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

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


小智 2

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

adb shell input help
Run Code Online (Sandbox Code Playgroud)

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