Как отправлять команды быстрого ввода в реальном времени на устройство Android с помощью USB-отладки?

#android #adb

#Android #adb

Вопрос:

Я хочу настроить некоторые клавиши на моем ПК таким образом, чтобы при их нажатии они запускали определенное действие сенсорного ввода на моем устройстве Android.

Пример: — нажатие K означает сенсорный ввод в центре экрана и так далее. Использование мыши для управления экраном.

Однако есть две проблемы, которые я не могу решить:-

(1) оболочка adb слишком медленная для использования. Из-за того, как это работает с использованием Java, задержка составляет более секунды.

Мне нужно, чтобы это было как можно быстрее.

(2) Я не могу найти способ отправки живого сенсорного ввода, большинство инструментов просто записывают жесты и выполняют их.

Ответ №1:

Вы можете добиться этого с помощью следующих шагов

Разработайте приложение, которое запускается как сервер и прослушивает вашу команду через порт внутри вашего устройства

Приложение может быть вызвано из команды / службы инструментария оболочки adb. Какой-нибудь приведенный ниже код для получения команд (строк) с вашего компьютера и выполнения необходимых действий.

 public void startServer() throws Exception {

    try {
        serverSocket = new ServerSocket(8080);
        CLIENT_SOCKET = serverSocket.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                CLIENT_SOCKET.getInputStream()));

        String inputLine;
        // Starting server
        while ((inputLine = in.readLine()) != null) {
            //out(inputLine);
            // do whatever with inputLine, handle touches for 'K'
        }
    } catch (IOException e) {
           //err in connection, handle
    }
  

перенаправьте свой локальный порт на порт внутри оболочки adb (это порт вашего устройства, через который приложение прослушивает)

 adb forward tcp:8080 tcp:8080
  

Приведенная выше команда перенаправляет локальный порт ПК 8080 на порт 8080 внутри вашего устройства / эмулятора adb shell.

Программа или скрипт на стороне клиента (вашего ПК), который подключается, отправляет команды на локальный порт, которые, в свою очередь, достигают оболочки

Пример кода на python

  import socket
 soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 soc.connect(('127.0.0.1', 8080))
 soc.send('kn') # this will reach inside the startServer function of app.
  

Выше приведен лишь некоторый пример кода, в Интернете будет много других complete примеров для вышеуказанных шагов.

Ответ №2:

Если вы тестируете свое приложение или просто используете его с помощью кода, вы можете описать большинство пользовательских взаимодействий с вашим приложением, используя инструменты тестирования Android, такие как Espresso или, предпочтительно, набор для тестирования AndroidX (входит в комплект поставки Jetpack от Google).

Преимуществом использования инструмента тестирования пользовательского интерфейса, такого как Espresso, будет его способность ожидать неопределенной продолжительности между касанием пользователя и его ответом устройством или эмулятором.

Эти тесты выполняются максимально быстро на устройстве. При запуске тестов вы увидите, что с экраном происходит быстрое взаимодействие.

Если вы запустите эти тесты на эмуляторе, они будут медленными из-за присущей эмуляторам медленной природы и их зависимости от аппаратного обеспечения вашей системы. Было бы лучше, если бы вы запускали их на устройстве или в облаке с помощью тестовой лаборатории Firebase.