我正在从monkeyrunner切换到AndroidViewClient。这很好,因为它都是Python。但是,在发出type或press命令时,每个命令之间的延迟就像一秒钟:
import sys
import os
import time
try:
sys.path.append(os.path.join(os.environ['ANDROID_VIEW_CLIENT_HOME'], 'src'))
except:
pass
from com.dtmilano.android.adb.adbclient import AdbClient, Device
device.type("hello")
# type a space
device.press('KEYCODE_SPACE', 'DOWN_AND_UP')
device.type("world")
monkeyrunner上面的代码在“按”和“类型”之间几乎没有延迟。为什么AdbClient产生这种延迟?它不是通过adb shell吗?它应该很快......
注意:“hello”和“world”的输入速度很快。每种类型命令之间只有1秒的延迟。
答案 0 :(得分:2)
device.type()
正在执行adb shell input text
而input
是一个控制台java应用程序。
Monkeyrunner更快,因为它的设备端java进程只启动一次。所以不幸的是,持久的shell连接对你没有多大帮助。
此外,我尝试将java运行时从Dalvik
切换到ART
,希望它能帮助Java应用程序启动时间。它确实减少了大约20%(从我尝试过的单位上减少了0.82秒到0.65秒)。
答案 1 :(得分:0)
命令之间有一些延迟的原因是adbclient
主要使用shell
连接来发送它们。此shell连接未保持打开状态。 monkeyrunner
使用套接字向monkey
发送命令,从而为什么命令之间的延迟最小。
adbclient
可以重新使用开放的shell
广告联盟,或者socket
monkey
打开monkeyrunner
。
这并不难实现,但尚未在路线图中实施。无论如何,总是欢迎补丁。
另一方面,对于其他最常见的情况,adbclient
的速度提高了几倍http://dtmilano.blogspot.ca/2013/09/androidviewclientculebra-takesnapshot.html