SKIP 布局检查功能使用指南:从音量键采集到 Web 端节点分析
移动开发原生移动GUI 自动化【免费下载链接】SKIP自动跳过APP开屏广告项目地址https://gitcode.com/gh_mirrors/ski/SKIP点击查看免费下载导读布局检查Layout Inspect是 SKIP 提供的一项探查能力用于抓取屏幕上应用的节点布局信息节点树、坐标、控件 ID、文本等。本文以官方使用文档为主体结合仓库源码完整讲解从「开启无障碍服务 → 开启布局检查开关 → 按音量- 触发采集 → 记录管理 → Web 端导入分析 → 生成自定义配置」的完整闭环帮助你为自定义配置功能准备准确的节点数据。功能定位布局检查用来做什么在深入操作之前先明确这项功能的价值。官方功能文档 docs/advance/layout-inspect/intro.md 明确指出布局检查功能可以用于探查屏幕的节点布局信息掌握屏幕的节点信息有助于编写自定义配置文件。SKIP 的跳过逻辑基于无障碍节点匹配文本 / 控件 ID / 屏幕坐标三类规则而每个 App 的页面结构各不相同只有拿到目标页面真实的节点树才能写出精准的配置。布局检查正是这条数据链路的起点它把屏幕快照与节点树一并采集下来供你离线分析甚至在 Web 工具中一键生成 YAML 配置片段。使用前置条件两类权限缺一不可官方文档开头用提示块强调「布局检查功能需要通知权限。」结合源码看这个前置条件背后有两条硬性依赖通知权限布局检查依赖一个前台服务InspectService来执行屏幕采集MediaProjection 截屏。在 InspectService.kt 中服务启动时会创建名为INSPECT_SERVICE、标题为「布局检查服务」的通知渠道并通过startForeground(1, notification)常驻通知栏。而在 InspectActivity.kt 中开启布局检查开关时App 会先调用NotificationManagerCompat.areNotificationsEnabled()检测通知权限未开启时弹出「通知权限请求」对话框要求先允许通知。SKIP 无障碍服务节点树采集与音量键拦截都依赖无障碍服务详见下文。首先开启「SKIP 无障碍服务」布局检查的第一步是确保 SKIP 的无障碍服务处于开启状态。这一步的强制校验写在 StartInspectRepository.kt 中当尝试开启布局检查而无障碍服务未运行时会直接拦截并提示toast_start_accessibility_first「请先开启无障碍服务」。开启方式进入系统「设置 → 无障碍 → 已安装的服务」找到 SKIP 并开启「无障碍」服务。服务声明见 accessibility.xml其中启用了flagReportViewIds上报控件 ID这是skipIds匹配的数据来源、flagIncludeNotImportantViews包含非重要视图保证节点树尽量完整以及canRetrieveWindowContent读取窗口内容节点采集的基础能力。然后开启「是否启用布局检查」的开关开启无障碍服务后进入 SKIP 的「布局检查」页面将「是否启用布局检查」开关打开。对应源码是 StartInspectButton.kt 与 InspectActivity.kt 中的开关监听逻辑其内部流程为若检测到通知权限未开启先弹出通知权限请求对话框通知权限就绪后调用MediaProjectionManager.createScreenCaptureIntent()请求屏幕录制/截屏授权系统会弹出确认弹窗勾选「不再询问」可避免重复授权授权通过后启动前台服务InspectService其通过VirtualDisplayImageReader建立屏幕镜像等待采集指令时抓取一帧画面并保存为 JPEG关闭开关或服务被系统回收时停止并销毁InspectService。InspectService启动后会在通知栏常驻「布局检查服务运行中」的通知strings.xml这也是本文开头强调通知权限的根本原因。通过按下「音量-」执行一次布局检查开关开启后每按下一次「音量-」按键即可执行一次布局检查。这条链路在 MyAccessibilityService.kt 的onKeyEvent中实现仅当InspectService正在运行时拦截KEYCODE_VOLUME_DOWN的按下事件命中后调用accessibilityInspectRepository.startAccessibilityInspect()并消费该事件返回true避免音量继续生效。补充除了音量键官方还提供了悬浮窗触发方式。开启布局检查页面中的「是否启用悬浮窗」后点击悬浮窗图标同样可触发一次检查FloatingWindowService.kt 中带有 1000ms 防抖若检查服务未运行会提示「请先开启布局检查服务」。开关副标题「启用后点按『悬浮窗/音量-』执行布局检查」对此也有说明。触发后发生了什么一次检查的完整数据链路一次检查并非只拍一张截图而是「截图 节点树 打包」三件事核心实现在 AccessibilityInspectRepository.kt 的startAccessibilityInspect()生成UUID作为本次记录的fileId并置起截图与节点采集两个标志位节点采集无障碍服务收到下一个窗口事件时执行startCaptureNode()MyAccessibilityService.kt以 BFS 广度优先方式遍历当前窗口的AccessibilityNodeInfo树为每个节点记录深度、父子关系、屏幕边界、可点击性、类名、文本与控件 ID屏幕截图InspectService通过ImageReader抓取一帧屏幕压缩为 JPEG 保存打包成记录后台协程以 1 秒为间隔最多重试 5 次等待同名的.json与.jpeg文件齐备后调用ZipUtils.zipFiles()将两者打包为{fileId}.zip并弹出「保存成功」提示超时未齐备则提示「保存失败」。所有文件统一存放在 App 私有目录filesDir/capture下。节点 JSON 的结构对应 NodeRootSchema.kt 与 NodeChildSchema.kt顶层fileId、appName、packageName、activityName、screenWidth、screenHeight、createTime、deviceName、nodes每个节点nodeId、parentId、depth、childCount、left/top/right/bottom屏幕坐标、isClickable、className、text、viewIdResourceName。这份结构同时定义了 Web 端 docs/inspect/types.ts 中AccessibilityWindow/AccessibilityNode的类型两端数据格式完全对齐。最后在「布局检查记录」页面查看、删除与分享采集完成后打开「布局检查记录」页面InspectRecordActivity.kt可对每条记录执行三类操作查看以图片弹窗形式查看该次采集的屏幕截图JpegDialog分享通过系统分享面板将{fileId}.zip分享给其他应用转存——分享实现基于FileProvider生成content://URI 并以ACTION_SENDapplication/zip发送删除删除单条记录同步清理同名.zip/.jpeg/.json三个文件菜单中还提供「全部删除」。列表页数据来源于 InspectListRepository.kt扫描capture目录下所有.zip文件读取同名的.json解析出应用名、包名、Activity 名与创建时间并按创建时间倒序排列配合 InspectListPagingSource.kt 做分页加载记录入口按钮会实时显示「当前存在 N 条记录」的数量InspectRecordButton.kt。Web 端通过「布局检查工具」导入并查看详细节点手机端查看的是截图与概要信息更详细的节点分析需要转到 Web 端完成。官方文档指引在 Web 端通过「布局检查工具」导入并查看详细的节点信息该工具即仓库中 docs/inspect/index.md 对应的页面由 InspectHome.vue 渲染。Web 端的工作方式与使用要点如下导入记录页面头部提供「批量上传」按钮InspectHeader.vue可一次选择多个.zip文件解压逻辑见 docs/inspect/hook/useZip.ts它用 JSZip 将 zip 中的.jpeg与.json分离并把解析结果存入浏览器本地 IndexedDBdocs/my-index-db/index.ts重复文件会被自动去重记录列表上传后以表格展示创建时间、应用名称、包名、设备名称支持按应用过滤、按时间排序与多选批量删除InspectTable.vue点击行进入详情页通过?fileId参数定位若本地已有缓存则直接读取节点详情查看详情页InspectContainer.vue分为四块截图区NodePic.vue显示采集到的屏幕截图鼠标悬停显示真实像素坐标点击画面可命中对应节点并高亮红色框选框选带 150ms 过渡动画节点树NodeTree.vue以树形结构展示节点层级叶子节点与含子节点显示子节点数量一目了然节点表NodeTable.vue展示当前选中节点的坐标、深度、可点击性、类名、文本、控件 ID 等全部属性配置代码NodeCode.vue选中节点后自动生成一段 YAML 配置草稿并支持一键复制。从 Web 工具直接生成 YAML 配置这是布局检查与「自定义配置」衔接最顺滑的一环。NodeCode.vue 会根据选中节点的特征自动生成对应的配置片段节点存在viewIdResourceName→ 生成skipIdsid 取控件 ID节点存在text→ 生成skipTexts并自动填入length: 文本长度两者皆无 → 生成skipBoundsbound 取left,top,right,bottom拼接的坐标字符串无论哪种类型都会带上当前页面的activityName以及filefileIdxxxnodeIdyyy溯源参数和占位的desc描述字段。例如选中一个带控件 ID 的节点会得到类似下面的草稿可在此基础上补充描述后合并进自定义配置- appName: 示例应用 packageName: com.example.app skipIds: - id: com.example.app:id/btn_skip activityName: com.example.app.activity.SplashActivity file: fileIdxxxx-xxxx-xxxxnodeId10 desc: 请填写描述将这份 YAML 接入 SKIP 的「自定义配置」功能支持 URL / YAML 文本 / JSON 文本见 settings 相关源码即可形成「布局检查 → 生成配置 → 自动跳过」的完整工作流。配置字段的完整语义可参考 docs/advance/custom-config/field-meaning.md 与仓库内置示例 app/src/main/assets/skip_config_v3.yaml。常见问题与注意事项按音量- 无反应请确认两件事——「SKIP 无障碍服务」已开启且「是否启用布局检查」开关处于打开状态InspectService运行中才会拦截音量键。通知权限被关闭布局检查服务是前台服务系统要求其必须有常驻通知若关闭通知权限开启开关时会被强制弹窗引导开启。记录保存失败截图与节点 JSON 需在 5 秒内每秒检测一次最多 5 次同时就绪才会打包成功若当前页面恰好没有新的无障碍事件导致节点未采集可能出现失败提示重新按一次音量- 即可。记录存储位置采集产物zip / jpeg / json保存在 App 私有目录filesDir/capture下可随时在记录页删除或分享转存不占用系统相册。配置溯源Web 工具生成的file字段fileIdxxxnodeIdyyy可追溯到原始采集记录便于后续校对节点坐标与配置是否一致。赞分享移动开发原生移动GUI 自动化【免费下载链接】SKIP自动跳过APP开屏广告项目地址https://gitcode.com/gh_mirrors/ski/SKIP点击查看免费下载相关推荐SKIP 布局查看实战从节点探查获取 text、id、bounds编写精准的 skip 配置SKIP 布局查看实战从节点探查获取 text、id、bounds编写精准的 skip 配置 SKIP 是一款基于 Android 无障碍服务自动跳过 Ap移动开发原生移动GUI 自动化PyTorch分布式检查点(DCP)使用指南PyTorch分布式检查点 DCP 使用指南 概述 在分布式训练环境中模型参数和梯度被划分到多个训练器上这使得模型检查点的保存和恢复变得复杂。PyTorch示例工程一键取整本教材tchMaterial-parser电子课本 PDF 一次到位一键取整本教材tchMaterial parser电子课本 PDF 一次到位 逐页保存卡在第 4 本 开学前夜陈老师收新学期语文电子课本对着国家中小学前端桌面应用AI 应用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

clangd 找不到 stdio.h?编译命令数据库与头文件路径配置指南

clangd 找不到 stdio.h?编译命令数据库与头文件路径配置指南

1. 问题现象与核心症结拆解clangd在编辑器里给#include <stdio.h>画上红色波浪线&#xff0c;鼠标悬停提示stdio.h file not found&#xff0c;但同一份代码用gcc或clang命令行编译却完全正常。这个现象在 C/C 开发者圈子里出现的频率极高&#xff0c;尤其是刚换编辑器、…

2026/10/13 22:27:02 阅读更多 →
Phylo-Biomni AI智能体:不招募真实患者,如何用多智能体模拟虚拟临床试验

Phylo-Biomni AI智能体:不招募真实患者,如何用多智能体模拟虚拟临床试验

1. 项目缘起&#xff1a;当临床试验遇上智能体&#xff0c;为什么这件事值得关注临床试验是整个医疗健康领域最烧钱、最耗时、失败率最高的环节之一。一款新药从立项到上市&#xff0c;动辄十年起步&#xff0c;耗资数十亿&#xff0c;而其中相当大比例的成本和风险都压在临床试…

2026/10/13 22:26:01 阅读更多 →
GD32W515板载Wi-Fi驱动开发:寄存器级初始化与零拷贝DMA实战

GD32W515板载Wi-Fi驱动开发:寄存器级初始化与零拷贝DMA实战

简介&#xff1a;本资源是面向嵌入式开发工程师与GD32系列初学者的GD32W515官方开发板完整BSP驱动工程&#xff0c;聚焦低功耗Wi-Fi MCU平台的外设驱动实践与NES游戏模拟器移植实战。项目已实现板载全部外设基础驱动&#xff0c;并成功将经典NES模拟器移植至GD32W515平台——CP…

2026/10/13 22:26:01 阅读更多 →

最新新闻

程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

程序员如何培养“设计师的眼睛”:从经典包豪斯栅格到日常 UI 找茬训练法

在前端产研团队中&#xff0c;我们经常能听到这样的争论&#xff1a; 资深 UI 设计师走查页面时&#xff0c;皱着眉头说&#xff1a;“这个图标和旁边的文字不对劲&#xff0c;往上偏了 2 像素&#xff1b;这块卡片的投影太脏了&#xff1b;两个区块之间的呼吸感完全断了。”坐…

2026/10/13 23:18:21 阅读更多 →
SpringBoot 2.3+ MySQL中hibernate_sequence报错解决方案

SpringBoot 2.3+ MySQL中hibernate_sequence报错解决方案

1. 项目概述&#xff1a;为什么这个标题值得深挖&#xff1f;SpringBoot 2.3.0 是一个承前启后的关键版本——它正式移除了对 javax.* 包的默认依赖&#xff0c;全面转向 jakarta.* 命名空间&#xff1b;同时 Hibernate 5.4.17 成为默认 JPA 实现&#xff0c;而该版本对数据库序…

2026/10/13 23:18:21 阅读更多 →
深入理解5g<五十六>UM的接收过程

深入理解5g<五十六>UM的接收过程

5G RLC UM&#xff08;Unacknowledged Mode&#xff0c;非确认模式&#xff09;接收端的主要职责是**按序重组并向上层递交RLC SDU**&#xff0c;同时通过窗口机制和定时器来管理乱序、分段和丢失的PDU。其过程严格遵循3GPP TS 38.322规范。### &#x1f4e6; 核心状态变量与重…

2026/10/13 23:18:21 阅读更多 →
WBCE损失重写:动态加权、梯度聚焦与标签可信度建模

WBCE损失重写:动态加权、梯度聚焦与标签可信度建模

1. 项目概述&#xff1a;WBCE损失重写不是调参&#xff0c;而是对分类任务底层逻辑的重新校准“WBCE损失重写”这个标题乍看像一个技术微调动作&#xff0c;但实际它指向的是深度学习分类任务中一个被长期低估、却直接影响模型泛化能力与业务落地效果的核心环节——加权二元交叉…

2026/10/13 23:18:21 阅读更多 →
Python文本预处理与词频可视化:从原始文本到词云图实战

Python文本预处理与词频可视化:从原始文本到词云图实战

1. 从原始文本到可视化&#xff1a;为什么预处理决定了词频图的成败很多人拿到一段文本&#xff0c;第一反应就是直接丢进词频统计工具里跑&#xff0c;结果出来的图要么是一堆"的""了""是"占满画面&#xff0c;要么是各种标点符号和乱码混在一起…

2026/10/13 23:18:21 阅读更多 →
免费帝国插件内容流水线搭建:采集、伪原创、发布与推送全流程避坑指南

免费帝国插件内容流水线搭建:采集、伪原创、发布与推送全流程避坑指南

简介&#xff1a;这是一款面向站长与SEO从业者的帝国CMS配套插件&#xff0c;聚焦关键词采集、文章采集、伪原创改写、自动发布与搜索引擎推送等环节&#xff0c;帮助希望提升站点收录与排名、又缺乏持续内容产出精力的用户搭建半自动化的优化流程。资源以zip压缩包形式提供&am…

2026/10/13 23:17:20 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →