#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.