布局分析器 — 像 LayoutInspector 一样看控件
工具定位
布局分析器(Layout Inspector)是 Android Studio 提供的用于分析应用界面控件树的开发工具。AutoJs6 在浮动按钮中内置了类似功能——无需连接电脑、无需开发环境,在手机上直接分析任何应用的界面控件。
┌─────────────────────────┐
│ 被分析的应用界面 │
│ ┌─────┬─────┬─────┐ │
│ │TextView│Button│EditText│ ← 半透明线条切割控件边界
│ └─────┴─────┴─────┘ │
│ │
│ 点击控件 → 查看属性 │
│ 或 → 生成选择器代码 │
└─────────────────────────┘
启动方法
- 打开要分析的应用,让目标界面显示在前台
- 从 AutoJs6 浮动按钮点击 🔍 布局分析
- 浮动按钮切换为分析模式
- 界面上各个控件被半透明线条分割显示
三种分析模式
布局范围分析(推荐新手)
浮动按钮默认进入此模式。屏幕上会出现半透明覆盖层,用线条切割显示每个控件的边界范围:
- 点击感兴趣的控件区域
- 弹出控件属性详情面板
- 面板底部提供操作选项
查看控件信息
点击控件后,弹出的面板显示该控件的全部属性:
┌───────────────────────┐
│ 控件信息 │
├───────────────────────┤
│ className: Button │
│ id: btn_login │
│ text: 登录 │
│ desc: null │
│ bounds: [200,800,880,920] │
│ clickable: true │
│ enabled: true │
│ childCount: 0 │
│ depth: 8 │
├───────────────────────┤
│ [生成代码] [复制ID] │
└───────────────────────┘
生成选择器代码
点击面板上的「生成代码」按钮,AutoJs6 会自动根据当前控件的可用属性生成选择器表达式:
// 优先用 id(最稳定)
id("btn_login").click();
// 没有 id 时用 text
text("登录").click();
// 都没有时用 className + bounds
className("Button").bounds(200, 800, 880, 920).click();
多选择器建议
如果控件的定位属性不稳定(如 text 随语言变化),分析器可能会同时给出多个备选:
// 方案一:id(最优先)
id("btn_login").click();
// 方案二:desc(如果有)
desc("login button").click();
// 方案三:text + className + 位置兜底
className("Button").text("登录").click();
分析器内的操作
切换应用
在分析模式下,可以直接点击其他应用的界面元素,分析器会自动适配新的前台应用。
返回上级控件
某些子控件嵌套很深,可以从属性面板向上浏览父控件链:
ImageView "图标"
└── LinearLayout (父)
└── ConstraintLayout (祖父)
└── ...
结束分析
再次点击浮动按钮或按返回键结束布局分析模式。
在脚本中调用
布局分析器也可以通过代码触发:
// 打开布局分析器界面
app.openLayoutInspector();
// 或者直接输出当前界面的控件树
let root = auto.getRoot();
function printTree(node, indent) {
console.log(indent + node.className() +
(node.text() ? ' "' + node.text() + '"' : '') +
(node.id() ? ' id=' + node.id() : ''));
let children = node.children();
for (let child of children) {
printTree(child, indent + " ");
}
}
printTree(root, "");
实战:分析一个登录界面
假设你要为一个登录应用写自动化脚本,但不知道控件的 id 和属性:
- 打开应用 → 进入登录界面
- 开启布局分析 → 点击浮动按钮 🔍
- 点击用户名输入框 → 看到
id: et_username, className: EditText - 点击密码输入框 → 看到
id: et_password, className: EditText - 点击登录按钮 → 看到
id: btn_login, text: 登录, className: Button - 点击生成代码 → 复制到脚本中使用
生成的脚本:
id("et_username").setText("myaccount");
id("et_password").setText("mypassword");
id("btn_login").click();
深色模式适配
布局分析器完全支持 AutoJs6 的夜间模式。在深色主题下,覆盖层线条颜色和属性面板背景会自动切换为深色,不影响使用体验。
常见问题
Q: 某些应用中控件显示为一个大框? A: 部分应用(尤其是游戏、WebView)不向无障碍服务暴露内部控件结构,只能看到一个整体容器。这种情况需要用坐标点击或图像识别代替。
Q: 布局分析时界面闪烁? A: 分析器会不断刷新控件树,部分应用在频繁刷新时可能轻微闪烁。这是正常现象,结束分析后恢复。
Q: 生成的代码在不同设备上 bounds 不一样? A: 是的,bounds() 使用绝对坐标,在不同分辨率设备上会失效。优先使用 id() 或 text() 选择器。