ADB: перетаскивание или перетаскивание / ручное перетаскивание через события - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу программно управлять устройством Android через ADB.

Так как мне нужно прокрутить список, я попытался прокрутить с помощью такой команды:

adb shell input touchscreen swipe 935 500 789 500 1000

Это работает, нопроблема заключается в том, что в Android добавлен эффект броска / резинки.Поэтому, когда проведите пальцем, он все равно прокручивается немного дальше.Но мне нужно выбрать идеальный пиксель, чтобы этот подход не работал так, как мне нужно.Даже когда я увеличиваю длительность пролистывания до 3000 мс, она прокручивается еще на несколько пикселей.

Может быть, есть простой способ сказать, ADB / свист моего устройства, но удерживайте палец после перемещения в течение ~ 500 мс, прежде чем отпустить палецчтобы предотвратить эффект «броска»?

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

[...]
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000fb
/dev/input/event6: 0003 0030 0000000a
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000fa
/dev/input/event6: 0003 0030 0000000b
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0036 000001b6
/dev/input/event6: 0003 0030 0000000c
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f9
/dev/input/event6: 0003 0030 0000000d
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f8
/dev/input/event6: 0003 0030 0000000e
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f7
/dev/input/event6: 0003 0030 0000000f
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0030 00000000
/dev/input/event6: 0003 0039 ffffffff
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 002f 0000000c
/dev/input/event6: 0003 0039 0000000c
/dev/input/event6: 0003 0035 000000f7
/dev/input/event6: 0003 0036 000001b6
/dev/input/event6: 0000 0000 00000000

Я предполагаю, что это должно сказать мне, что мое событие /dev/input/event6, и я предполагаю, что коды событий, которые мне нужны0035, 0036 и 0039.

Поэтому я немного попробовал и придумал такой подход:

adb shell sendevent /dev/input/event6 3 53 935
adb shell sendevent /dev/input/event6  0 0 0
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6  0 0 0
adb shell sendevent /dev/input/event6 3 57 1
adb shell sendevent /dev/input/event6  0 0 0
adb shell sendevent /dev/input/event6 3 53 789
adb shell sendevent /dev/input/event6  0 0 0
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6  0 0 0
adb shell sendevent /dev/input/event6 3 57 0
adb shell sendevent /dev/input/event6  0 0 0

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Yay - я наконец-то понял, как это сделать!

Я написал небольшой скрипт, который преобразует adb shell getevent в десятичные значения и заменяет коды на известные имена из этой статьи .

Это дало мне вывод, подобный этому:

/dev/input/event6: 3 - TRACKING_ID [4294967295]
/dev/input/event6: 0 - SYN_REPORT [0]
/dev/input/event6: 3 - 47 [0]
/dev/input/event6: 3 - POSITION_X [415]
/dev/input/event6: 3 - POSITION_Y [428]
/dev/input/event6: 3 - TOUCH_MAJOR [5]
/dev/input/event6: 3 - TRACKING_ID [0]
/dev/input/event6: 0 - SYN_REPORT [0]

Тогда я смог выяснить, как события работали и могли копировать поведение.Мне просто нужно было изменить координаты X и Y.

adb shell sendevent /dev/input/event6 3 57 88
adb shell sendevent /dev/input/event6 3 53 935
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 5
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 906
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 877
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 847
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 818
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 789
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 57 -1
adb shell sendevent /dev/input/event6 0 0 0
0 голосов
/ 06 февраля 2019

Проблема в задержке между командами sendevent.Если вы проверите исходный код sendevent, он каждый раз открывает файл, пишет, а затем закрывается.плюс задержка между двумя adb shell командами.Это делает непрерывное отправление сообщений таким медленным, и то, что вы записали, не реплицируется.

Что вам нужно сделать, это получить sendevent исходный код , изменить его так, чтобы он брал столько аргументов, сколько аргументирует егоМожно и внутри открыть файл один раз, проанализировать 3 int с за раз и записать, пока все аргументы не будут проанализированы, закрыть файл.Вы можете видеть, что то, что вы записали, работает как очарование.

отправитель по умолчанию

sendevent /dev/input/event1 3 47 0
sendevent /dev/input/event1 3 57 13578
sendevent /dev/input/event1 1 330 1
sendevent /dev/input/event1 1 325 1

Модифицированный отправитель

/data/local/tmp/mysendevent /dev/input/event1 3 47 0 3 57 13578 1 330 1 1 325 1

Я сделал то же самое некоторое время назад, вы можете отсылать полную работу здесь- https://github.com/rils/ARP/wiki

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...