現在,我使用uiautomator做傾倒這樣的UI:任何更快的轉存UI層次結構的方法?
adb shell uiautomator dump
,它工作正常,除了它需要3秒鐘,進行了它。所以我想知道是否有更快的方法來做到這一點?就像創建一個轉儲UI的服務一樣,還是需要花費很長時間?
現在,我使用uiautomator做傾倒這樣的UI:任何更快的轉存UI層次結構的方法?
adb shell uiautomator dump
,它工作正常,除了它需要3秒鐘,進行了它。所以我想知道是否有更快的方法來做到這一點?就像創建一個轉儲UI的服務一樣,還是需要花費很長時間?
猜我應該回答我自己的問題,因爲我找到了一個更好的方法來做到這一點。我發現這個項目有重量輕RPC服務器togheter使用uiautomator這樣你就可以將命令發送到設備:
https://github.com/xiaocong/android-uiautomator-server#build
這使得傾銷幾乎立即和作品真的很好。他也有一個Python項目,如果你想看看如何讓RPC調用:
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')
函數調用命令( 「中國平安」, 「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 anduiautomator -stub.jar),並將它們放在「/ data/local/tmp /」中