скриншоты с обезьяной на Android - PullRequest
1 голос
/ 19 апреля 2011

Я использую следующий скрипт для создания скриншотов:

def snap():
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
    print "Waiting for device.."
    device = MonkeyRunner.waitForConnection()
    print "Device found.."
    result = device.takeSnapshot()
    print "Clicked.."
    now = datetime.datetime.now()
    file = "C:\\Workspace\\"+now.strftime("%d%m%Y-%H%M%S")+".png"
    result.writeToFile(file,'png')
    print file

Я поместил это в цикл while, и он отлично работает для одного скриншота.Но после этого одного снимка экрана вывод бесконечно зависает:

C:\Program Files\Android\android-sdk\tools>monkeyrunner C:\Workspace\snap.py
Click (y/n)?y
User said: y
Calling function..
Waiting for device..
Device found..
Clicked..
C:\Workspace\19042011-155124.png
Click (y/n)?y
User said: y
Calling function..
Waiting for device..

Как мне предотвратить блокировку кода и продолжать делать снимки экрана?Это проблема памяти устройства?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Выведите device = MonkeyRunner.waitForConnection() из цикла и оставьте соединение с устройством открытым.

0 голосов
/ 02 августа 2011

Я бы предпочел использовать команду adb pull из оболочки в скрипте monkeyrunner, как этот

os.system('adb pull /dev/graphics/fb0 image')
subprocess.call('ffmpeg -vframes 1 -vcodec rawvideo -loglevel quiet -f  rawvideo -pix_fmt rgba -s 480x854 -i image -f image2 -vcodec png image.png')

Примечание: Он использует ffmpeg для преобразования необработанных данных в файл png.FFMPEG должен находиться в пути
Это было сделано, потому что API-интерфейс часто принимает исключение API-интерфейсов takenapshot ().
480x854 - разрешение устройства, измените его в соответствии с вашим устройством.
Этим способом я могу сделать серию снимков.

Если вы чертовски склонны к device.takesnapshot (), попробуйте добавить time.sleep () между ними, это может помочь.

0 голосов
/ 21 апреля 2011

Для принудительного отключения вы можете убить процесс. Не элегантно, но нет способа закрыть соединение от monkeyrunner.

...
pid = int(filter(lambda p: len(p) == 9 and p[8] == 'com.android.commands.monkey', map(lambda l: l.split(), device.shell('ps').splitlines()))[0][1])
print "killing %s" % pid
device.shell("kill %d" % pid)
device = None
...
...