Использование sendevent в python для подключения телефона через usb медленно из-за доступа su - PullRequest
0 голосов
/ 29 мая 2020

Использование python ppadb для автоматизации кликов. Касание ввода работало нормально, но было медленно, поэтому я внедрил свое устройство (android 10, пиксель 2), чтобы использовать sendevent / dev / input / event #. Я использовал adb shell getevent для прослушивания касаний и определения определенных c значений для моего устройства (event2 и команды для касания вниз, ввода координат, подъема и 0 0 0 для их отправки)

import utils as u, random, time, sys, os

driver= u.Driver(id)

sendCmd = "su +c sendevent /dev/input/event2 "
driver.device.shell(sendCmd + "3 57 374")
driver.device.shell(sendCmd + "3 54 970")
driver.device.shell(sendCmd + "3 53 900")
driver.device.shell(sendCmd + "0 0 0")
driver.device.shell(sendCmd + "3 57 -1")
driver.device.shell(sendCmd + "0 0 0")

Это работало, но было довольно медленно. Из того, что я читал, это может быть связано с тем, что su каждый раз открывает новый экземпляр оболочки. Я пытался отправить «su» сам по себе, но он неизменно зависает. (Я пробовал \ n и ~ в качестве доводчиков). Когда я вручную отправляю код через cmd, "adb shell su" зависает, но если я введу и вставлю команды sendevent. Могу отправлять клики на телефон. Кроме того, если я попробую «adb shell» в cmd, а затем в следующей строке введите «su», он изменится с walleye: / $ на walleye: / #, и я также могу вставить туда события sendevents. (Эти щелчки выполняются довольно быстро, если я вставляю сразу несколько)

Моя следующая попытка была go в ppadb и посмотреть, как обрабатывались сокеты, но это немного прошло мимо меня. Я немного поигрался с этим, но я не мог получить несколько команд, отправленных через одно «su». Я также пытался использовать функцию root в ppadb.devices, но получил сообщение «RuntimeError: adbd не может работать как root в производственных сборках».

Другая возможность, которую я видел, - это перезапись файла sendevent. c, как в ответе здесь: Android sendevent действительно медленный - как его ускорить?

На данный момент, поскольку я не уверен, что вызывает медленную работу sendevent, я не уверен, что делать дальше.

Изменить: я смог использовать MagiskHide Props Config для изменения значений свойств, ro.adb.secure = 0, ro.secure = 0 и ro.debuggable = 1. Я все еще получаю сообщение «adbd не может работать как root в серийных сборках ». getprop ro.build.type возвращает «пользователя».

https://github.com/pcboy/adb-insecure-patcher выглядит многообещающим, но я не уверен, как его использовать.

Edit2: Открыл. sh в adb-insecure-patcher, похоже, он делает то же самое, что и я с MagiskHide Props. В настоящее время изучается, как переписать sendevent. c

1 Ответ

0 голосов
/ 25 июля 2020

Ничего из этого делать не нужно. Просто используйте подпроцесс:

import subprocess

#now you can send any adb command to device using:
subprocess.call("adb shell input tap 2300 1220", shell = True)
subprocess.call("adb shell input swipe 3847 1223 2341 1232", shell = True)
subprocess.call("adb shell monkey -p com.instagram.android -c android.intent.category.LAUNCHER 1",shell = True)

Вы уловили идею. В основном отправляйте любую команду в формате subprocess.call("adb shell <your command here>", shell = True)

Кроме того, подпроцесс, как я полагаю, уже предустановлен, но если не просто введите pip install subprocess в командной строке. Вы должны хорошо относиться к go.

...