资讯动态

SKIP:基于安卓无障碍服务自动跳过 APP 开屏广告的开源实现与自定义规则订阅实践

发布时间:2026/10/13 9:37:32 来源:尧图企业网站定制
移动开发原生移动GUI 自动化【免费下载链接】SKIP自动跳过APP开屏广告项目地址https://gitcode.com/gh_mirrors/ski/SKIP点击查看免费下载SKIP 是一款免费开源的安卓应用利用安卓无障碍服务AccessibilityService自动定位并点击 APP 开屏广告上的「跳过」按钮。本篇基于仓库 README 展开结合默认订阅配置 skip_config_v3.yaml 与核心源码讲解其跳过原理、配置格式与「自定义规则订阅」机制的完整落地方式读完后可理解从配置加载、节点匹配到手势点击的整条链路并能自行维护或提交规则订阅。一、SKIP 是什么SKIP 旨在帮助用户快速点击 APP 开屏广告的跳过按钮减少手动等待与点击让使用体验更加流畅。当前仓库发布的版本为 v3.1.0见 CHANGELOG.md 与 SKIP-v3.1.0.apk。主界面预览如下对应 README 中的「主界面预览」主界面以「开启无障碍服务」为核心入口配套功能包括应用白名单、布局检查、应用保活、设置严格模式、自定义配置、主题切换、自动更新等。项目采用 GPL-3.0 开源协议LICENSE使用前请阅读免责声明。二、核心原理无障碍服务如何执行「跳过」2.1 服务注册与能力声明SKIP 在 AndroidManifest.xml 中注册了MyAccessibilityService声明了android.permission.BIND_ACCESSIBILITY_SERVICE权限与android.accessibilityservice.AccessibilityService动作能力配置指向 accessibility.xmlandroid:canPerformGesturestrue允许服务通过手势模拟点击这是「自动点按跳过按钮」的前提android:canRetrieveWindowContenttrue允许读取当前窗口的视图树从而遍历节点查找广告按钮android:accessibilityFlags中的flagReportViewIds、flagIncludeNotImportantViews上报控件资源 ID、包含非重要视图保证skipIds这类基于资源 ID 的规则可以命中android:notificationTimeout100缩短事件通知延迟提高扫描实时性。用户开启方式见 启用无障碍服务点击主界面中央按钮跳转系统设置后选择「使用 SKIP」完成授权。2.2 事件驱动的主流程核心入口是 MyAccessibilityService.kt 的onAccessibilityEvent每次无障碍事件触发时执行获取根节点getCurrentRootNode()取当前活动窗口的根节点rootInActiveWindow。切换应用时重置状态当根节点包名变化时重置扫描计数scanTimes 0并清空已点击记录clickedRect。白名单与扫描上限过滤满足「包名不在白名单 且严格模式开启 或scanTimes 50」才继续。即普通模式下每个应用最多扫描 50 次兼顾省电与命中严格模式下则不受次数限制完全遵循配置规则。查找目标区域调用configLoadRepository.getTargetRect(rootNode, appActivityName, isStrict)得到待点击的Rect。防抖点击同一矩形rect.toString()只点击一次通过clickedRect去重避免同一广告被重复触发。手势点击click 方法 用GestureDescription.Builder构造一条指向rect中心点、时长 100ms 的笔画再通过dispatchGesture派发完成「自动点击」。若设置了「跳过提示」strings 中toast_skip_tip为「已为您跳过广告」点击成功后会弹出 Toast。2.3 三种匹配策略skipTexts / skipIds / skipBoundsConfigLoadRepository.kt 的getTargetRect是规则匹配的核心它对同一个应用同时并发三种策略基于 Kotlin 协程scope.async谁先命中就采用谁的结果策略字段查找方式典型场景按文本skipTextsfindAccessibilityNodeInfosByText(text)可选length限制文本长度可选click指定固定点击坐标按钮无资源 ID、只有「跳过」「关闭」等文案按资源 IDskipIdsfindAccessibilityNodeInfosByViewId(id)广告 SDK 有固定 ID如穿山甲的tt_splash_skip_btn按边界skipBoundsBFS 遍历节点树traverseNode 寻找四边误差 ≤1px 的节点节点无法被文本/ID 命中用坐标框定位关键行为细节均可从源码确认严格模式下的默认规则非严格模式时isStrict ! true若配置中没有skipTexts会自动追加一条text 跳过的默认规则ConfigLoadRepository.kt。对应 strings.xml 中「严格模式」开关的两个取值「完全遵循配置规则」与「默认匹配「跳过」关键字」。开启严格模式后 SKIP 只执行配置文件写明的规则不会误点应用内其他含「跳过」文案的控件。activityName 限定三种策略都支持activityName字段配置值与当前 Activity 类名不一致时该条规则直接跳过可把规则精确限定到开屏 Activity如com.MobileTicket.ui.dialog.SplashAdDialog。click 坐标兜底当节点能命中但本身不可点击如被遮挡、isClickablefalse时可用click: x,y指定实际落点。例如豆瓣规则skip_config_v3.yaml命中ad_mark后点击固定坐标1280,180配置注释为「1440x3200分辨率下无法选中的跳过按钮」。加载阶段click会被转换为 1px 大小的Rect(x, y, x1, y1)convertClick。三、自定义规则订阅README 的核心功能README 中「自定义规则订阅」表格给出了当前默认订阅规则描述订阅链接作者源码地址默认订阅https://skip.guoxicheng.top/skip_config_v3.yamlGuoXiChengskip_config_v3该链接与仓库内置的 skip_config_v3.yaml 同源。应用内通过「设置 → 自定义配置」使用订阅输入形式支持URL 链接 / YAML 文本 / JSON 文本见 strings.xml 的settings_custom_subtitle粘贴订阅 URL 即可加载线上规则也可以直接粘贴 YAML/JSON 文本作为临时配置。3.1 配置文件的字段参考以 v3 格式为例仓库默认配置覆盖京东读书、哔哩哔哩、CSDN、菜鸟、爱奇艺、铁路12306、虎扑等数十个应用。一个同时使用多种策略的完整示例取自 skip_config_v3.yaml- appName: 京东读书 packageName: com.jd.app.reader skipBounds: - bound: 1243,176,1383,316 # left,top,right,bottom四边坐标 activityName: com.jingdong.app.reader.logo.JdLogoActivity file: fileId20f3db03-af60-4dc3-885a-b954b985931fnodeId14 desc: 1440x3200分辨率下圆形开屏广告按钮 skipIds: - id: com.jd.app.reader:id/mJumpBtn # 控件资源 ID activityName: com.jingdong.app.reader.logo.JdLogoActivity desc: 开屏广告跳过按钮字段含义与 ConfigReadSchema.kt 的解析结构一一对应字段必填说明packageName是目标应用的包名规则以此作为主键索引appName否应用名仅作注释性说明不参与匹配skipTexts[].text—要匹配的文案如「跳过」「关闭」「进入首页」skipTexts[].length否限制节点文本长度 length用于区分同文案的不同控件skipTexts[].activityName/skipIds[].activityName/skipBounds[].activityName否限定只在指定 Activity 下生效skipTexts[].click/skipIds[].click/skipBounds[].click否固定点击坐标x,y用于节点无法被正常点击的场景skipIds[].id—控件资源 ID如com.byted.pangle.m:id/tt_splash_skip_btnskipBounds[].bound—left,top,right,bottom四段数字file/desc否布局检查产出的节点来源与人工备注便于维护追溯注意仓库代码解析ConfigReadSchema时只消费packageName与三类skip*字段因此appName、file、desc等扩展字段不会破坏加载Gson 反序列化时按声明字段取值。3.2 配置加载与校验链路配置从输入到生效的完整调用链读取来源ConfigReadRepository.readConfig 从 DataStore 读取CUSTOM_CONFIG缺省值为默认订阅 URLstrings.xml 的store_default_config。URL 拉取getFromUrl 判断为http(s)://时通过MyApiNetwork.fetchConfigFromUrl下载非 URL 内容原样返回。YAML 解析getFromYaml用 SnakeYAML 加载为ListConfigReadSchema再转 JSON解析失败则回退原文兼容 JSON 文本输入。JSON 反序列化与状态反馈getFromJson成功后生成ConfigPostSchema(SUCCESS, md5, schemaList)失败则返回「未检测到有效的配置」R.string.invalid_config状态主界面据此展示配置加载结果。规则转换handleConfig 将字符串形式的bound/click转为Rect按packageName建立MapString, ConfigLoadSchema交由 ConfigViewModel.loadConfig 写入ConfigLoadRepository供匹配使用。此外仓库还内置了一份独立的配置校验脚本 scripts/yaml-check.ts使用 zod 校验packageName不得含首尾空白、bound必须是四段数字、resolution必须为两段数字、length不得为负、且每个应用至少提供skipIds/skipTexts/skipBounds之一测试用例见 scripts/tests/yaml-check.test.ts。编写规则时可参照它自检降低推送订阅时的格式错误率。3.3 配置格式的演进v1 → v3仓库 assets 中同时保留了三个历史版本可作为格式演进的对照skip_config.yamlv1package_name/skip_id/skip_text/skip_bounds分辨率#bound写法以及max_click_count字段skip_config_v2.yamlv2改为packageName 数组形式的skipIds/skipTexts/skipBoundsskipBounds引入独立的resolution字段skip_config_v3.yamlv3当前版本新增activityName与click两个可配置项CHANGELOG.md v3.0.0 记录bound不再携带resolutiondesc/file字段用于记录布局检查来源。四、配套能力白名单、布局检查与保活围绕「跳过」这个主功能SKIP 还设计了几个支撑环节均来自源码与 CHANGELOG 事实应用白名单MyAccessibilityService每次扫描前调用whiteListRepository.isAppInWhiteList(packageName)命中白名单的应用直接跳过扫描避免误点白名单页面支持搜索与「显示系统应用」开关WhiteListActivity。布局检查v3.0.0 引入的调试工具。开启后通过悬浮窗按钮或音量减键触发startCaptureNodeMyAccessibilityService.kt对当前窗口做 BFS 遍历把每个节点的深度、父子关系、left/top/right/bottom边界、text、viewIdResourceName等序列化为 JSON 存档配置文件中file: fileId...nodeId...字段即指向这些存档中的具体节点。它是编写自定义规则时获取bound、id值的主要手段介绍见 docs/advance/custom-config/intro.md 与 布局检查使用文档。应用保活无障碍服务依赖前台存活应用提供「常驻通知栏」MyForegroundServiceforegroundServiceTypespecialUse、省电策略/自启动/后台任务等指引页AliveActivityv3.1.0 修复了「后台任务隐藏」失效问题。严格模式v3.1.0 起「严格模式下可在应用内执行跳过」配合 2.3 节说明的默认规则逻辑决定 SKIP 的激进程度。五、许可证与使用注意SKIP 采用GPL-3.0许可发布完整条款见 LICENSE。README 同时提供了 免责声明说明自动点击行为由无障碍服务在用户设备本地执行用户应自行评估对具体应用的使用风险本文介绍的技术实现手势派发、节点遍历、配置订阅均基于安卓官方无障碍服务 API不涉及 hook 或系统修改。六、贡献自定义规则订阅README 约定了社区协作方式若你维护了一份自定义规则订阅可修改 README.md 中的「自定义规则订阅」表格补充规则描述、订阅链接、作者与源码地址后提交 PR经合并后即可被更多用户发现。编写规则时建议使用布局检查工具获取真实节点信息优先使用skipIds稳定性最高必要时叠加activityName限定开屏 Activity并对无法命中的节点补充click坐标兜底。赞分享移动开发原生移动GUI 自动化【免费下载链接】SKIP自动跳过APP开屏广告项目地址https://gitcode.com/gh_mirrors/ski/SKIP点击查看免费下载相关推荐基于无障碍服务的安卓开屏广告自动跳过Android-Touch-Helper开屏跳过实现原理与使用指南基于无障碍服务的安卓开屏广告自动跳过Android Touch Helper开屏跳过实现原理与使用指南 Android Touch Helper应用名移动开发GUI 自动化Android-Touch-Helper无障碍服务配置完整指南Android Touch Helper无障碍服务配置完整指南 想要告别烦人的开屏广告吗Android Touch Helper开屏跳过助手就是你的终极解决方移动开发GUI 自动化Android-Touch-Helper安卓开屏广告自动跳过工具详解Android Touch Helper安卓开屏广告自动跳过工具详解 项目概述 Android Touch Helper是一款基于Android无障碍服务开发移动开发GUI 自动化上一篇视频硬字幕提取神器3分钟将视频字幕转为可编辑SRT文件下一篇3个为什么让Windows Cleaner成为你的C盘救星深度体验报告创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑