monkeyrunner를 이용하면 아주 간단하게 안드로이드 기기를 제어할 수 있습니다.
하지만 MOVE 이벤트를 지원하지 않고, 단순히 한 지점에서 다른 지점으로의 drag만을 지원하고 있었기에, monkeyrunner를 이용해 사람의 입력을 똑같이 재현할 수 없는 문제점이 있었습니다.
해서, MOVE 이벤트를 지원하도록 monkeyrunner를 약간 수정, AOSP에 컨트리뷰션했고, 곧바로 merge 되었습니다.
(https://android-review.googlesource.com/#/c/50991/)
그리고 한참 잊고 있었는데, 얼마 전에 어떤 외국인이 최신 버전 monkeyrunner에서 해당 기능이 제대로 들어갔는지, 어떻게 쓰면 되는지 스택오버플로에 질문을 올리고 제게도 메일을 보냈더군요.
(http://stackoverflow.com/questions/18161416/android-monkey-runner-touch-with-move)
확인해보니 당연하게도 해당 기능이 최신 버전 monkeyrunner에는 들어간 채로 배포되고 있습니다.
해서 간단한 예제를 작성, 공유했는데, 여기서도 공유해 봅니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env monkeyrunner | |
import time | |
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice | |
device = MonkeyRunner.waitForConnection() | |
# Touch down screen | |
device.touch(100, 500, MonkeyDevice.DOWN) | |
# Move from 100, 500 to 300, 500 | |
for i in range(1, 11): | |
device.touch(100 + 20 * i, 500, MonkeyDevice.MOVE) | |
print "move ", 100 + 20 * i, 500 | |
time.sleep(0.1) | |
# Move from (300, 500 to 200, 500) | |
for i in range(1, 11): | |
device.touch(300, 500 - 10 * i, MonkeyDevice.MOVE) | |
print "move ", 300, 500 - 10 * i | |
time.sleep(0.1) | |
# Remove finger from screen | |
device.touch(300, 400, MonkeyDevice.UP) |
단순히 touch 함수에 DOWN, UP 처럼 MOVE로 타입만 주시면 됩니다. 간단하죠? ;)