1 问题背景

作为Android开发者的我们一般用Android Studio自带的Layout Inspector(布局检查器)来检查可调试APP的实时布局层级:

但是Layout Inspector有很大的局限性,它只能用来调试那些“可调试APP”,即该APP的AndroidManifest.xml文件中Application标签的android:debuggable属性的值为true

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.helloapplication"><applicationandroid:allowBackup="true"android:debuggable="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.HelloApplication"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

一般来说,“可调试APP”就是我们用Android Studio构建Android项目生成的“Debug应用”,而真正发布到应用市场上的APP都是“Release应用”,例如微信、QQ、支付宝等APP,而“release应用”是不可以用于调试的。

但有的时候我们想要研究这些“Release应用”的布局层级和UI实现时,我们该怎么办呢?例如博主上大学时,实验室Android课题组布置的大作业是开发一个高仿微信APP,在没有安卓微信的源码的情景下,我们有什么办法具体地了解微信APP详细的布局层级和视图属性呢?又或者在工作时,我们想借鉴某款竞品APP详细的UI视图和布局实现,这应该怎么做呢?

其实这个问题目前有3个较为有效的解决方案:

  1. 使用Android Studio自带的万能的布局检查器UI Automator Viewer,不用将安卓测试机Root和Exposed,也不用反编译任何“Release应用”即可查看任何三方应用和系统应用的布局层级。可参考文章《Android布局层次结构查看工具-uiautomatorviewer介绍》;
  2. 用ApkTools或者MT管理器对想调试的“Release应用”反编译为“Debug应用”、签名并打包,接着可直接使用Layout Inspector来检查可调试该APP的实时布局层级,例如上述截图中被反编译后可成功调试的“百度贴吧”APP。可参考文章《Android反编译debug调试详解(一)(附图)》;
  3. 将安卓测试机Root并Exposed,接着安装Xposed插件:Xdebuggable或App Debuggable即可直接使用Layout Inspector来检查可调试该APP的实时布局层级。可参考文章《掘金-android调试release包的方法》。

而本篇文章主要想详细介绍Android Studio自带的万能的布局检查器UI Automator Viewer的用法,因为它的上手成本很低并足够简单。

2 Android Studio自带的万能的布局检查器UI Automator Viewer

UI Automator Viewer是一个用来来扫描和分析Android应用程序的UI组件的GUI工具。这个工具本身是作为Android的UI Automator测试框架(Ui自动化框架)的配套工具而存在的,每当我们使用UI Automator测试框架编写UI功能自动化项目时,一定会经常使用该工具,因为该工具可以查看当前Android设备屏幕上的控件信息。

UI Automator Viewer之所以强大,正是因为它可以用来查看任何任何三方应用和系统应用的布局层级。例如下述下述UI Automator Viewer软件的截图展现了2021年8月26日更新的V8.0.11版本的微信“聊天列表页”的布局层级,我们可以发现微信主要用了ListView来实现“聊天列表页”的,虽然我们初学安卓时一直被教导用RecyclerView,因为它的性能比ListView好上很多。因此要么是做了足够的性能优化,要么就是历史遗留代码结构过于繁杂和耦合,重构的工作量太大,所以微信目前仍使用ListView来实现“聊天列表页”。

另外我们又能看到微信用RecyclerView实现了“通讯录列表页”:

其中,UI Automator Viewer的详细使用教程可参考文章《Android布局层次结构查看工具-uiautomatorviewer介绍》。

2.1 UI Automator Viewer的环境配置和打开方式

介绍了那么多,现在来介绍下UI Automator Viewer的环境配置方法和打开方式吧:

Windows电脑启动UI Automator Viewer可以参考文章《AppiumForWindows 菜鸟计划(五)uiautomatorviewer》;Mac电脑启动UI Automator Viewer可以参考文章《Mac终端快速启动uiautomatorviewer》。

2.2 UI Automator Viewer打开失败问题的解决方案

UI Automator Viewer是个有一定历史年代感的老工具了,所以在2021年的今天启动该工具会碰到无法打开等一系列的问题,通过网上查阅文献以及博主的亲身体验,UI Automator Viewer打开失败问题主要有两类:

  1. 电脑环境变量配置的JDK版本不是JDK8,导致UI Automator Viewer打开失败并报错Error:Could not create the Java Virtual Machine,该问题的解决方案就是将电脑环境变量配置的JDK版本重新指定为JDK8,问题具体的解决方案可参考文章《Mac下不能成功打开uiautomatorviewer的问题解决》;
  2. 博主亲身碰到的问题,即Big Sur版本的Mac电脑无法打开UI Automator Viewer并报错java.lang.NullPointerException,该问题的解决方案就是从Eclipse官方下载最新版本的swt.jar包,问题具体的解决方案可参考文章《StackExchange-Software Quality Assurance & Testing》和《GitHub-Broken GUI of UIAutomatorViewer on MacOS Big Sur #911》。

2.3 UI Automator Viewer打开失败问题的解决方案

按照上述步骤配置好UI Automator Viewer的环境变量并解决无法打开的问题后,我们就可以正常使用UI Automator Viewer啦,其详细使用教程可参考文章《Android布局层次结构查看工具-uiautomatorviewer介绍》。例如,你也可以通过UI Automator Viewer来查看微信各个页面详细的布局层级和视图:


本文参考文献:

android studio 4.0 Live Layout Inspector切换为老版本Layout Inspector

性能优化工具(六)-Legacy Layout Inspector

掘金-路遥TM-Layout Inspector 支持 3D 视图了!

掘金-android调试release包的方法 Xposed插件:Xdebuggable和App Debuggable

Android反编译debug调试详解(一)(附图)

简书-Android调试release包

uiautomatorviewer not running on Mac Big Sur

Broken GUI of UIAutomatorViewer on MacOS Big Sur #911

Android布局层次结构查看工具-uiautomatorviewer介绍

Mac下不能成功打开uiautomatorviewer的问题解决

Mac终端快速启动uiautomatorviewer

丢弃LayoutInspector,换个方式看UI

Android万能布局检查器UI Automator Viewer使用教程、环境配置和Mac无法打开问题解决(uiautomatorviewer,android studio,layer,查看,错误)相关推荐

  1. Layout Inspector:视图布局检查器

    一.引言 在App运行过程中,我们的视图层级可能会由于用户的操作一直在发生改变,甚至可能会有一些出乎预料的变化.最近在请教前辈这类问题时,学习到了一个布局查看神器--Layout Inspector. ...

  2. Android开发之Android studio4.1查看app布局的方法 | 使用布局检查器和布局验证工具调试布局

    老套路先上图: 老版本和新版本查看方法不一样,我这个是4.1的版本.但是大部分菜单都差不多所以先看我这个版本查看布局方法如下: 选择查看app布局的进程即可 总结: 菜单栏选择Tools-Layout ...

  3. UI Automator Viewer Error while obtaining UI hierarchy XML file

    Error obtaining UI hierarchy Reason: Error while obtaining UI hierarchy XML file: com.android.ddmlib ...

  4. Appium基础篇5-抓元素工具之UI Automator Viewer

    在开始介绍元素定位之前,我们需要介绍一个工具,这个工具是Android SDK 自带的工具,叫UI Automator Viewer,可以在SDK\tools下找到这个工具并启动它,本篇,来介绍下这个 ...

  5. Android 万能适配方案和UI屏幕适配 不同分辨率 最全面 最易懂的

    文章目录 1.屏幕尺寸 2.屏幕分辨率 3.屏幕像素密度 4.图片的适配方案 1.屏幕尺寸 屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米(下面有图文介绍) 比如常见的屏幕尺寸有2.4 ...

  6. UI automator viewer 将MuMu模拟器识别为横屏的解决方法

    问题: UI automator viewer 将MuMu模拟器识别为横屏,如图所示 解决办法: 1.点击MuMu模拟器右上角的菜单 2.进入设置中心–>界面设置–>分辨率设置–>自 ...

  7. 视频教程-FFmpeg打造Android万能音频播放器-Android

    FFmpeg打造Android万能音频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发.底层NDK开发等:有开源项目:ht ...

  8. 一步一步学android之布局管理器——LinearLayout

    线性布局是最基本的一种布局,在基本控件篇幅中用到的都是LinearLayout,线性布局有两种方式,前面也有用到,一种是垂直的(vertical),一种是水平的(horizontal).我们同样来看下 ...

  9. cocos2d-x3.4 android重新编译,cocos2d-x 4.0 Spine 3.8编译环境配置(高级篇)

    cocos2d-x各种的环境配置这里就不做解释 首先准备spine的运行库http://zh.esotericsoftware.com/spine-runtimes 是一个github代码托管,clo ...

  10. 如何使用安卓无障碍服务之uiautomatorviewer.bat(UI Automator Viewer)层级查看器

    首先安装Android studio,我使用的android版本是 android-studio-2022.1.1.21-windows.zip No .exe installer 下载地址为 Dow ...

最新文章

  1. pangilin 安装编译
  2. T4文本模板转换过程
  3. http get post java_java发送http的get、post请求实现代码
  4. word怎么改一张纸的方向_折纸手工DIY,纸碗怎么折?一张纸就搞定,折法简单,宝宝也能折...
  5. DG Lecture 2 part 1: points, vectors, directional derivative
  6. Windows8 商店支付功能
  7. 【TWVRP】基于matlab人工鱼群算法求解带时间窗的车辆路径规划问题【含Matlab源码 161期】
  8. java 定时器 数据库_java实现定时器,定时修改数据库代码
  9. 批量word删除页眉页脚——VBS脚本,在office宏中运行即可
  10. bios调整服务器性能模式吗,怎样更改BIOS设置提高显卡性能
  11. jsp数据库中文乱码处理
  12. 深度学习笔试、面试题 一
  13. Learn OpenCV之Rotation Matrix To Euler Angles
  14. 10个城市logo设计
  15. CentOS7 个性化
  16. 22张图带你了解IP地址有什么作用
  17. AG6201中文规格书|AG6201方案应用|安格AG6201||HDMI转VGA带DAC方案
  18. 使用markdown玩转代码架构设计
  19. 建立动态碳排放责任因子系统——促进风电光电的有效消纳(江亿)
  20. tools自动登录签到脚本

热门文章

  1. Java集合中的retainAll()方法和removeAll()方法
  2. PhpSpreadsheet 生成圆饼图
  3. 自动控制原理9.3---线性定常系统的反馈结构及状态观测器
  4. CS224N WINTER 2022(三)RNN、语言模型、梯度消失与梯度爆炸(附Assignment3答案)
  5. 基于计算机视觉原理的自主足球机器人位置规划,基于计算机视觉原理的自主足球机器人位置规划...
  6. ubuntu安装openpose
  7. 单项选择题标准化考试系统
  8. 替换class文件,重启Tomcat不生效
  9. Windows10本地数据库搭建(MySQL、PostgreSQL)
  10. 11.4.2 内存映射的相关接口