androidadbandroid-viewandroid-uiautomator

Is there a way to get current activity's layout and views via adb?


For environment reasons I can only use adb commands.

Is there a way to get the current layout attributes like id, position, text etc ?

Similar to what uiautomatorviewer shows.


Solution

  • Use adb shell uiautomator dump command:

    Usage: uiautomator <subcommand> [options]
    
    Available subcommands:
    
    help: displays help message
    
    runtest: executes UI automation tests
        runtest <class spec> [options]
        <class spec>: <JARS> < -c <CLASSES> | -e class <CLASSES> >
          <JARS>: a list of jar files containing test classes and dependencies. If
            the path is relative, it's assumed to be under /data/local/tmp. Use
            absolute path if the file is elsewhere. Multiple files can be
            specified, separated by space.
          <CLASSES>: a list of test class names to run, separated by comma. To
            a single method, use TestClass#testMethod format. The -e or -c option
            may be repeated. This option is not required and if not provided then
            all the tests in provided jars will be run automatically.
        options:
          --nohup: trap SIG_HUP, so test won't terminate even if parent process
                   is terminated, e.g. USB is disconnected.
          -e debug [true|false]: wait for debugger to connect before starting.
          -e runner [CLASS]: use specified test runner class instead. If
            unspecified, framework default runner will be used.
          -e <NAME> <VALUE>: other name-value pairs to be passed to test classes.
            May be repeated.
          -e outputFormat simple | -s: enabled less verbose JUnit style output.
    
    dump: creates an XML dump of current UI hierarchy
        dump [--verbose][file]
          [--compressed]: dumps compressed layout information.
          [file]: the location where the dumped XML should be stored, default is
          /storage/emulated/legacy/window_dump.xml
    
    events: prints out accessibility events until terminated
    

    By default it dumps the views hierarchy to $EXTERNAL_STORAGE/window_dump.xml

    adb shell uiautomator dump
    UI hierchary dumped to: /sdcard/window_dump.xml
    

    Usually you would want to pull that file to your PC for further processing which would be an extra step. But there is a neat trick which allows to combine dumping and pulling into a single command. Using /dev/tty as a dump destination would make a single command which would print the whole dump to the stdout:

    adb exec-out uiautomator dump /dev/tty
    <?xml version='1.0' encoding='UTF-8' standalone='yes' ?><hierarchy rotation="0"><node ...></node></hierarchy>UI hierchary dumped to: /dev/tty