gpt4 book ai didi

android - 有没有更快的方法来转储 UI 层次结构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:46:55 25 4
gpt4 key购买 nike

现在我正在使用 uiautomator 像这样转储 UI:

adb shell uiautomator dump

除了执行它需要大约 3 秒之外,它工作正常。所以我想知道是否有更快的方法来做到这一点?就像创建一个转储 UI 的服务一样,还是需要同样长的时间?

最佳答案

我想我应该回答我自己的问题,因为我找到了更好的方法。我发现这个项目将 uiautomator togheter 与轻量级 rpc 服务器一起使用,因此您可以向设备发送命令:

https://github.com/xiaocong/android-uiautomator-server#build

这几乎可以立即进行转储,而且效果非常好。如果您想了解如何进行 rpc 调用,他还有一个 python 项目:

https://github.com/xiaocong/uiautomator

但我在这里创建了一个小例子。

启动服务器:

# Start the process
process = subprocess.Popen(
'adb shell uiautomator runtest '
'bundle.jar uiautomator-stub.jar '
'-c com.github.uiautomatorstub.Stub', stdout=subprocess.PIPE, shell=True)
# Forward adb ports
subprocess.call('adb forward tcp:9008 tcp:9009')

调用命令的函数(“ping”、“dumpWindowHierarchy”等):

def send_command(self, method_name, *args):
"""
Send command to the RPC server

Args:
method_name(string): Name of method to run
*args: Arguments
"""
data = {
'jsonrpc': '2.0',
'method': method_name,
'id': 1,
}
if args:
data['params'] = args
request = urllib2.Request(
'http://localhost:{0}/jsonrpc/0'.format(self.local_port),
json.dumps(data),
{
'Content-type': 'application/json'
})
try:
result = urllib2.urlopen(request, timeout=30)
except Exception as e:
return None
if result is None:
return None
json_result = json.loads(result.read())
if 'error' in json_result:
raise JsonRPCError('1',
'Exception when sending command to '
'UIAutomatorServer: {0}'.format(
json_result['error']))
return json_result['result']

注意必须先将第一个工程中的文件(bundle.jar和uiautomator-stub.jar)推送到设备中,放在"/data/local/tmp/"

关于android - 有没有更快的方法来转储 UI 层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com