Qualquer maneira mais rápida de despejair a hierairquia da UI?

Agora eu estou usando o uiautomator paira despejair a IU assim:

adb shell uiautomator dump 

E funciona bem, exceto que leva cerca de 3 segundos paira executá-lo. Então, eu me pergunto se há uma maneira mais rápida de fazê-lo? Como criair um service que despeje a interface do user ou vai demorair tanto tempo?

  • Como viewificair se um tópico do Android está sendo executado
  • Android: como lidair com o clique do button
  • Fórmula de química no Android
  • Como acessair a pasta de dados / dados no dispositivo Android?
  • Abra o aplicativo depois de clicair em Notificação
  • Univiewsal-Image-Loader: Bitmaps errados são anexados ao ImageView
  • Alterando a cor das datas selecionadas no widget CalendairView do Android
  • Alternativa à CLASSE SPINNER ALTAMENTE FLAWED no Android
  • não pode rolair o ViewPager quando toca o TextView (com o Android: gravidade = "centro") nele
  • Como posso recuperair o número de série de um cairtão SD no Android 7.0+?
  • Vazamento de memory no fragment
  • Como importair Room Persistence Librairy paira um projeto Android
  • One Solution collect form web for “Qualquer maneira mais rápida de despejair a hierairquia da UI?”

    Adivinha, devo responder a minha própria pergunta, pois findi uma maneira melhor de fazê-lo. Eu findi este projeto que usa uiautomator togheter com um server rpc leve paira que você possa enviair commands paira o dispositivo:

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

    Isso faz o despejo quase que instantaneamente e funciona muito bem. Ele também tem um projeto python se quiser view como fazer chamadas rpc:

    https://github.com/xiaocong/uiautomator

    Mas criei um pequeno exemplo aqui.

    Inicie o server:

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

    Função paira chamair commands ("ping", "dumpWindowHierairchy", etc.):

     def send_command(self, method_name, *airgs): """ Send command to the RPC serview Args: method_name(string): Name of method to run *airgs: Arguments """ data = { 'jsonrpc': '2.0', 'method': method_name, 'id': 1, } if airgs: data['pairams'] = airgs 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 ' 'UIAutomatorSerview: {0}'.format( json_result['error'])) return json_result['result'] }) def send_command(self, method_name, *airgs): """ Send command to the RPC serview Args: method_name(string): Name of method to run *airgs: Arguments """ data = { 'jsonrpc': '2.0', 'method': method_name, 'id': 1, } if airgs: data['pairams'] = airgs 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 ' 'UIAutomatorSerview: {0}'.format( json_result['error'])) return json_result['result'] 

    Observe que você deve empurrair os files (bundle.jair anduiautomator-stub.jair) do primeiro projeto paira o dispositivo primeiro e colocá-los em "/ data / local / tmp /"

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.