Имитирует ли "adb shell input text" программный ввод с клавиатуры?

adb shell input text "sometext"

ИЛИ ЖЕ

adb shell input keyevent eventid

они симулируют фактический ввод с виртуальной / аппаратной клавиатуры соответственно?

Я не нашел никакой документации для этих команд на developer.android.com/

Есть ли доверенная документация для этих команд?

2 ответа

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)

Таким образом, кажется, что "текст" действительно для виртуального (по умолчанию: сенсорный экран) и keyevent для физического (по умолчанию: клавиатура).

Вы можете переопределить устройство ввода текста - adb shell input keyboard text "foo" работает просто отлично. Вы не можете отправлять сырые коды клавиш с экрана.

Относится к

adb shell input text "some\ text"

Я нахожу только исходный код: например. для 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>" был частично потерян - даже большая часть в конце! Это выглядело для меня в зависимости от производителя.

Есть хорошее описание для adb shell input * команды, просто введите

adb shell input help

За adb shell keyevent команды, различные коды клавиш доступны.

Я разрабатываю работу, в которой оцениваю производительность на разных клавиатурах и пытаюсь имитировать набор текста с клавиатуры реального пользователя. Инструмент, который я использую (клиент просмотра Android), использует вводимый текст для отправки текста на устройство. Однако при использовании этого инструмента для имитации ввода текста я заметил различия в поведении клавиатуры, вызванные использованием этого метода ввода.

При использовании вводимого текста положение указателя не изменяется, и на клавиатуре не отображается анимация нажатия клавиш. Напротив, при использовании касания ввода X Y для нажатия клавиши визуальное поведение такое же, как у реального пользователя, нажимающего клавишу. Кроме того, поведение GBoard отличается для обоих методов ввода. При вводе текста и последующем нажатии предложенного слова клавиатура не добавляет конечный пробел. Этого не происходит при использовании входного крана. Это помогает сделать вывод, что действительно есть различия между этими двумя методами ввода.

"adb shell input keyevent eventid" наверняка не будет имитировать реальное событие keyevent, поскольку id устройства == 0.

как насчет "вводимого текста оболочки adb"sometext"" это все равно не из физических... так что я думаю, что это будет так же, как нажатие на программную клавиатуру?

Другие вопросы по тегам