Есть ли способ получить текущий макет и представления активности через adb?

По причинам окружающей среды я могу использовать только команды adb.

Есть ли способ получить текущие атрибуты макета, такие как id, position, text и т. д. ?

Аналогично тому, что показывает uiautomatorviewer.


person Filipe Arruda    schedule 27.10.2014    source источник


Ответы (6)


Используйте команду adb shell uiautomator dump:

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

По умолчанию он сбрасывает иерархию представлений на $EXTERNAL_STORAGE/window_dump.xml.

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

Обычно вы хотите загрузить этот файл на свой компьютер для дальнейшей обработки, что является дополнительным шагом. Но есть хитрый прием, который позволяет совместить выгрузку и извлечение в одну команду. Использование /dev/tty в качестве места назначения дампа создаст одну команду, которая напечатает весь дамп в 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
person Alex P.    schedule 27.10.2014
comment
Хотел добавить примечание о том, что может быть запущен только один клиент UIAutomator, иначе команда выведет kill и не будет работать. Я был озадачен этим, пока не обнаружил, что меня заблокировали при запуске тестов с использованием открытого соединения UIAutomator. - person George Pantazes; 08.03.2017
comment
@Alex Алекс Я попытался запустить команду UIAutomatorDump, чтобы получить иерархию пользовательского интерфейса из эмулятора Android, но, похоже, я не получаю полный дамп. Что я делаю не так? Я пытаюсь получить дамп для активности UCBrowser, работающего в эмуляторе Android, чтобы я мог получить привязку кнопки/элемента для нажатия. Я также задал вопрос о SO относительно того же здесь - stackoverflow .com/questions/43780490/ - person Jignesh; 04.05.2017
comment
У меня такая ошибка :( null root node returned by UiTestAutomationBridge - person Sam; 08.02.2020

adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml

Откройте /tmp/view.xml в веб-браузере, например:

google-chrome /tmp/view.xml

adb exec-out дамп uiautomator /dev/tty

из другого ответа у меня не сработало.

person apricot    schedule 07.10.2016
comment
на моем компе не работает. я меняю на это adb pull $(adb shell uiautomator dump | egrep -o '/.*?xml') - person chinaanihchen; 23.01.2018

Инструмент dump AndroidViewClient/culebra позволяет сделать именно это. AndroidViewClient можно использовать как библиотеку, а также предоставляет некоторые инструменты, такие как dump и culebra.

usage: dump [OPTION]... [serialno]

Options:
  -H, --help                       prints this help                             
  -V, --verbose                    verbose comments                             
  -v, --version
  -I, --ignore-secure-device       ignore secure device                         
  -E, --ignore-version-check       ignores ADB version check                    
  -F, --force-view-server-use      force view server use (even if UiAutomator present:w)
  -S, --do-not-start-view-server   don't start ViewServer                       
  -k, --do-not-ignore-uiautomator-killed don't ignore UiAutomator killed              
  -w, --window=WINDOW              dump WINDOW content (default: -1, all windows)
  -a, --all                        dump all information about Views             
  -i, --uniqueId                   dump View unique IDs                         
  -x, --position                   dump View positions                          
  -b, --bounds                     dump View bounds                             
  -d, --content-description        dump View content descriptions               
  -g, --tag                        dump View tags                               
  -c, --center                     dump View centers                            
  -f, --save-screenshot=FILE       save screenshot to file                      
  -W, --save-view-screenshots=DIR  save View screenshots to files in directory  
  -D, --do-not-dump-views          don't dump views, only useful if you specified -f or -W
  -A, --device-art=MODEL           device art model to frame screenshot (auto: autodetected)
  -Z, --drop-shadow                drop shadow for device art screenshot        
  -B, --glare                      screen glare over screenshot                 
  -h, --use-uiautomator-helper     use UiAutomatorHelper Android app            
  -X, --debug=LIST                 debug options 

запуск dump без параметров, просто печатает дерево представлений и некоторые его основные свойства, такие как ID

android.widget.FrameLayout  
   com.android.launcher3.Workspace com.google.android.apps.nexuslauncher:id/workspace 
      android.widget.FrameLayout com.google.android.apps.nexuslauncher:id/workspace_blocked_row 
         android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text1 May 1
         android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text2 MONDAY, 2017
      android.widget.TextView  Maps
   android.widget.ImageView com.google.android.apps.nexuslauncher:id/g_icon 
   android.widget.ImageView com.google.android.apps.nexuslauncher:id/all_apps_handle 
   android.view.ViewGroup com.google.android.apps.nexuslauncher:id/layout 
      android.widget.TextView  Messenger
      android.widget.TextView  Chrome

с другой стороны, если вам нужны позиции представлений, вы можете запустить

$ дамп -x

android.widget.FrameLayout   (0, 0, 1440, 2392)
   com.android.launcher3.Workspace com.google.android.apps.nexuslauncher:id/workspace  (0, 0, 1440, 2392)
      android.widget.FrameLayout com.google.android.apps.nexuslauncher:id/workspace_blocked_row  (30, 126, 1380, 372)
         android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text1 May 1 (1037, 194, 337, 162)
         android.widget.TextView com.google.android.apps.nexuslauncher:id/date_text2 MONDAY, 2017 (1092, 356, 282, 73)
      android.widget.TextView  Maps (30, 1614, 276, 372)
   android.widget.ImageView com.google.android.apps.nexuslauncher:id/g_icon  (30, 214, 276, 196)
   android.widget.ImageView com.google.android.apps.nexuslauncher:id/all_apps_handle  (636, 1986, 168, 98)
   android.view.ViewGroup com.google.android.apps.nexuslauncher:id/layout  (0, 2084, 1440, 308)
      android.widget.TextView  Messenger (306, 2112, 276, 280)
      android.widget.TextView  Chrome (858, 2112, 276, 280)

Параметры дадут вам контроль над выводом. Дополнительную информацию можно получить здесь.

person Diego Torres Milano    schedule 01.05.2017

Я использовал следующее на Mac для печати форматированного xml на консоли:

adb shell uiautomator dump && adb pull /sdcard/window_dump.xml $TMPDIR && more $TMPDIR/window_dump.xml | xmllint --format -

Возможно, вам придется изменить путь к файлу /sdcard/window_dump.xml для извлечения в зависимости от того, где находится дамп файла xml.

person running-codebase    schedule 03.04.2017

Используйте следующее, чтобы просмотреть макет xml в блокноте или текстовом редакторе по умолчанию.

adb shell uiautomator dump && adb pull /sdcard/window_dump.xml && start window_dump.xml
person Oush    schedule 18.10.2018

В 2020 году рекомендуется использовать инструмент, встроенный в Android Studio.

  1. Подключи свой телефон
  2. Следите за скриншотом

Источник. /а>

введите здесь описание изображения

person Andrii Kovalchuk    schedule 08.01.2020
comment
В 2020 году рекомендуется прочитать вопрос, на который вы отвечаете. По причинам окружающей среды я могу использовать только adb команды. - person Alex P.; 08.01.2020