Быстрое моделирование ключевых событий (оболочка Android)

#android #adb #sh

#Android #adb #sh

Вопрос:

Использование adb shell input text <String> or adb shell input keyevent <KEYCODE_NAME> отлично работает при отправке текста на устройство Android, но моя проблема заключается в скорости.

Использование чего-то подобного input keyevent KEYCODE_A KEYCODE_A KEYCODE_SPACE KEYCODE_A KEYCODE_ENTER; позволит быстро ввести текст, но разделение его на 2 команды приведет к задержке (1 сек) между 2 командами (намного медленнее).

Пример кода оболочки:

Способ 1 (намного быстрее):

 input keyevent KEYCODE_A KEYCODE_A KEYCODE_ENTER KEYCODE_A KEYCODE_A KEYCODE_ENTER;
  

Способ 2:

 input keyevent KEYCODE_A KEYCODE_A KEYCODE_ENTER;
input keyevent KEYCODE_A KEYCODE_A KEYCODE_ENTER;
  

Я хотел бы ввести большой текст как можно быстрее, но, например, сценарий оболочки, за которым input keyevent следует большая комбинация KEYCODE_A, не будет выполнен. (Большие команды оболочки прерываются)

Каков наилучший способ отправки большого текста без длительных задержек?
Было sendevent бы быстрее отправлять большой текст?

Примечание:

  • Недостатком input text <String> является то, что он также имеет ограничение на свой размер и не может выполнять специальные ключевые события внутри него (например, кнопку «Назад» или ввод / новую строку).

Заранее спасибо.

Комментарии:

1. input keyevent $(for i in $(seq 500); do echo 29; done; echo 30) отлично работало на моем устройстве. вам нужно вводить более 500 кодов ключей одновременно?

2. @AlexP. Ваш метод работает нормально, но проблема в том, что между каждой командой будет задержка в 1 секунду, чего я и пытался избежать.

3. Я не предлагал решение, а скорее ставил под сомнение ваш вариант использования

Ответ №1:

Я понимаю, что вам нужна оболочка Android, но я думаю, что вы исчерпали доступные вам варианты.

Я знаю один способ, который быстрее, чем то, что вы пробовали, используя Instrumentation :

 final Instrumentation mInst = new Instrumentation();

mInst.sendKeySync(new KeyEvent(KeyEvent.ACTION_DOWN, keycode));
mInst.sendKeySync(new KeyEvent(KeyEvent.ACTION_UP, keycode));
  

Комментарии:

1. Что такое инструментарий? Как и где это реализовать?