1

我正在从 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 秒的延迟。

4

2 回答 2

3

迭戈的根本原因分析是错误的。新的外壳连接并不昂贵。花费最多时间的是启动一个新的 java 进程——因为device.type()它正在执行adb shell input text并且input是一个控制台 java 应用程序。

Monkeyrunner 更快,因为它的设备端 java 进程只启动一次。所以不幸的是,持久的 shell 连接对你没有多大帮助。

我还尝试将 Java 运行时从切换DalvikART希望它有助于 Java 应用程序的启动时间。它确实减少了大约 20%(在我尝试过的设备上从 0.82 秒到 0.65 秒)。

于 2014-06-04T23:26:35.263 回答
0

命令之间有一些延迟的原因是adbclient主要使用shell连接来发送它们。此外壳连接未保持打开状态。monkeyrunner使用套接字向其发送命令monkey,因此命令之间的延迟最小。 adbclient可以重新使用一个打开的shell连接或打开一个socketto monkeydo as monkeyrunner

这并不难实现,但还没有在路线图中。无论如何,补丁总是受欢迎的。

另一方面,对于其他最常见的情况,速度要快几倍: httpadbclient ://dtmilano.blogspot.ca/2013/09/androidviewclientculebra-takesnapshot.html

于 2014-05-31T15:25:31.463 回答