有没有办法通过adb获取当前活动的布局和视图?
由于环境原因,我只能使用adb
命令。
有没有办法获得当前的布局属性,如id
, position
, text
等?
类似于uiautomatorviewer
显示的内容。
使用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, eg 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
adb pull $(adb shell uiautomator dump | grep -oP '[^ ]+.xml') /tmp/view.xml
在Web浏览器中打开/tmp/view.xml
,如下所示:
google-chrome /tmp/view.xml
adb exec -out uiautomator dump / dev / tty
从另一个答案没有为我工作。
我在Mac上使用以下格式的XML到控制台:
adb shell uiautomator dump && adb pull /sdcard/window_dump.xml $TMPDIR && more $TMPDIR/window_dump.xml | xmllint --format -
您可能需要根据转储xml文件的位置来更改/sdcard/window_dump.xml
文件的path。
AndroidViewClient /库莱布拉的dump
工具可以让你做到这一点。 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)
这些选项可以让你控制输出。 你可以在这里得到更多的信息。