Я пытаюсь записать события экрана и выполнить их после для воспроизведения.
Я написал небольшой скрипт на python, который прослушивает события, преобразует их из шестнадцатеричного в десятичное, ждет в течение 5 секунд и выполняет записанные события сadb sendevent
.
Но по какой-то причине sendevent никогда не выполняется правильно, иногда он касается неправильных координат, иногда касается слишком долго, также возникают проблемы с задержками между касаниями.
Я не мог понять, почему этоэто происходит ?Я ожидаю, что он должен просто воспроизвести, так как Getevent захватил все необходимые данные (?)
import subprocess
import threading
import os
from time import sleep
eventsToSend = []
def eventSender():
while(True):
if(len(eventsToSend) > 200):
print("starting to execute in 5 seconds...")
sleep(5)
for command in eventsToSend:
#with open('output.txt', 'a') as f1:
#f1.write(command+os.linesep)
subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print("done")
break
else:
None
eventSenderStarter = threading.Thread(target = eventSender)
eventSenderStarter.start()
def runProcess(exe):
p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(True):
# returns None while subprocess is running
retcode = p.poll()
line = p.stdout.readline()
yield line
if retcode is not None or len(eventsToSend)>200:
print("Executing events...")
break
print("Listening for events...")
for line in runProcess('adb shell -- getevent /dev/input/event1'.split()):
myLine = line.decode().strip()
splittedLine = myLine.split(" ")
decimalString = ""
for index,hexadecimal in enumerate(splittedLine):
decimal = int(hexadecimal, 16)
if(index==0):
decimalString = decimalString+str(decimal)
if(index>0):
decimalString = decimalString+" "+str(decimal)
eventsToSend.append("adb shell sendevent /dev/input/event1 "+decimalString)
Просто подключите свой телефон к ПК, а затем запустите этот сценарий воспроизведения с экрана после 200 событий, он начнет воспроизведение (будетосторожно, потому что это может привести к неправильным координатам: P). В моем случае это было
/dev/input/event1
, поэтому вам может понадобиться отредактировать событие1 для тестирования.