有没有办法通过adb获取当前活动的布局和视图?

时间:2014-10-27 11:35:51

标签: android adb android-view android-uiautomator

出于环境原因,我只能使用 adb 命令。

有没有办法来获取当前的布局属性,例如idpositiontext

uiautomatorviewer 显示的内容类似。

6 个答案:

答案 0 :(得分:33)

使用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

通常您会希望将该文件提取到PC进行进一步处理,这将是一个额外的步骤。但是有一个巧妙的技巧,它允许将转储和拉入组合成一个命令。使用/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

答案 1 :(得分:3)

AndroidViewClient/culebra dump dump工具让您可以做到这一点。 AndroidViewClient可用作库,还提供culebrausage: 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

运行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 没有选项,只需打印Views树及其一些基本属性,如ID

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)

另一方面,如果你想要视图的位置,你可以运行

$ dump -x

https://zellwk.com/blog/crud-express-mongodb/, currently on "Showing quotes to users" 

选项可让您控制输出。您可以获得更多信息here

答案 2 :(得分:2)

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

在以下网络浏览器中打开/tmp/view.xml

google-chrome /tmp/view.xml
  

adb exec-out uiautomator dump / dev / tty

来自另一个答案并不适合我。

答案 3 :(得分:2)

我在Mac上使用以下内容将格式化的xml打印到控制台:

<StaticResource ResourceKey="char" variableModel="enemy"/> <StaticResource ResourceKey="char" variableModel="player"/>

您可能需要根据转储xml文件的位置更改要提取的adb shell uiautomator dump && adb pull /sdcard/window_dump.xml $TMPDIR && more $TMPDIR/window_dump.xml | xmllint --format -文件的路径。

答案 4 :(得分:0)

使用以下内容在记事本或默认的文本编辑器中查看xml布局

adb shell uiautomator dump && adb pull /sdcard/window_dump.xml &&启动window_dump.xml

答案 5 :(得分:-5)

在2020年,建议使用内置的Android Studio工具。

  1. 连接手机
  2. 关注屏幕截图

来源:https://developer.android.com/studio/debug/layout-inspector

enter image description here