Я пытаюсь использовать monkeyrunner для настройки нескольких планшетов, подключенных к одному и тому же компьютеру. Код работает нормально для 1 планшета, но в тот момент, когда я пытаюсь запустить его на нескольких планшетах, все взрывается.
Вот код, который вызывает файл Python monkeyrunner. mr1.py — это файл monkeyrunner, который я пытаюсь запустить.
import sys
import util
import threading
import commands
class myThread (threading.Thread):
def __init__(self, threadID, deviceId,env_path):
self.threadID = threadID
self.deviceId = deviceId
self.path = env_path
threading.Thread.__init__(self)
def run(self):
print "Starting " + self.deviceId
ret = commands.getstatusoutput(self.path+"monkeyrunner mr1.py "+self.deviceId)
print ret
print "Exiting " + self.deviceId
def main():
connected_devices = util.get_connected_devices()
count = 0
path = "/Users/ad/Desktop/android-sdk-macosx/tools/"
for device in connected_devices:
thread = myThread(count,device[0],path)
thread.start()
count = count + 1
if __name__ == "__main__":
main()
Я наткнулся на этот пост в блоге, в котором описывается состояние гонки в monkeyrunner. Я не уверен, что именно это вызывает проблему.
http://distributedreasoner.blogspot.com/2011/06/android-monkeyrunner-and-google-adb.html
Я также пытался использовать библиотеку MAML, упомянутую в сообщении блога выше, но мне так и не удалось заставить monkeyrunner выполняться симуляционно на нескольких устройствах. Вот реальный код мартышек.
import sys
import maml
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
deviceId = sys.argv[1]
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection(10.0,deviceId)
packagename = "com.android.settings"
classname = "com.android.settings.DisplaySettings" #SecuritySettings" #".DisplaySettings"
componentname = packagename + "/" + classname
device.startActivity(component=componentname)
maml.click(device,1088,300)
MonkeyRunner.sleep(0.4)
maml.click(device,864,361)
MonkeyRunner.sleep(0.4)
maml.click(device,612,621)
MonkeyRunner.sleep(0.5)
device.press ('KEYCODE_HOME', 'DOWN_AND_UP')
print "Exiting for device !" + deviceId
Основываясь на вопросе Commonsware, я заменил код многопоточности следующим последовательным кодом, и, похоже, он работает нормально, но, очевидно, это не самая идеальная ситуация.
for device in connected_devices:
print device[0]
ret = commands.getstatusoutput(path+"monkeyrunner mr1.py "+device[0])
print ret
Поскольку Android не позволяет программно изменять настройки местоположения/языка и т. д., а мне нужно настроить многие планшеты для изменения настроек, непосредственным вариантом было использование MonkeyRunner. Пара замечаний: я открыт для других инструментов, которые я мог бы использовать, кроме Monkeyrunner, для решения этой проблемы. Любая помощь по этой проблеме будет принята с благодарностью.