Skip to content

Snownamida/touch-grass

Repository files navigation

咋还在刷 (touch-grass)

一个「刷短视频自动计时 + 超额拦截」的安卓自用工具:识别你自己标记过的短视频页面(比如 B 站竖屏、抖音 feed、小红书视频笔记),一进入就悬浮显示计时;刷超了额度,全屏遮罩请你去摸摸草 🌱。

  • 纯本地运行,不联网、不上传任何数据
  • 规则不写死在代码里——内置规则也好、自己采的也好,都是同一套「采样生成」的产物:任何应用都能支持,目标 app 改版了重新捕捉一次就修好
  • 干预分三级:每 N 分钟轻提醒(默认 5)→ 计时药丸常驻 → 超额全屏拦截(先冷静 30 秒,再选「不刷了 / 再刷 5 分钟」)
  • 额度可调:单次连刷(默认 15 分)、每日(默认 45 分)、每周(默认 300 分),0 = 不限
  • 统计:今日/本周累计、按规则拆分、近 7 天柱状图
  • 内置三条默认规则(B 站竖屏、小红书视频、TikTok),首次启动自动载入,开箱即用;规则可导入/导出(文件或剪贴板,JSON 格式)

原理

核心是无障碍服务(AccessibilityService):

  1. 捕捉模式:悬浮面板上,短视频页面点 ✓(正样本)、同 app 的普通页面点 ✕(负样本)。每次采样记录当前 Activity 名和窗口控件树里的全部 resource-id。
  2. 生成规则:自动对正负样本求差——
    • 正负样本 Activity 不同(如 B 站竖屏 vs 长视频页)→ 直接按 Activity 匹配;
    • Activity 相同(如混排 feed)→ 找出「所有正样本都有、负样本都没有」的控件 id 作为指纹。
  3. 监测模式:窗口切换时先比 Activity 名(近乎零成本),命中再按需查控件指纹;匹配则开始计时,顶部悬浮药丸每秒刷新「本次 / 今日」时长。失配有 2.5 秒缓冲,视频之间上滑切换不会打断计时。

构建

需要 JDK 17 与 Android SDK(platform 34)。

# macOS 上 JDK 17 (brew install openjdk@17) 时:
JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home ./gradlew assembleDebug

产物在 app/build/outputs/apk/debug/app-debug.apk,用 adb install 或直接传到手机安装。

使用

  1. 安装后开启无障碍服务。Android 13+ 侧载应用的无障碍开关默认是灰的:先到「设置 → 应用 → 咋还在刷 → 右上角 ⋮ → 允许受限设置」,再去开启。
  2. 内置规则已覆盖 B 站竖屏 / 小红书视频 / TikTok:直接切「监测」模式即可,一进短视频页面顶部就会出现计时药丸。
  3. 其它 app 用「捕捉」模式自己采样:
    • 刷到短视频页面 → 点悬浮窗 ✓,建议采 2~3 次(不同视频各采一次,能过滤掉随内容变化的动态控件)
    • 切到普通页面(长视频、图文帖)→ 点 ✕,同样采 2~3 次
    • 点「生成规则」,切回「监测」

已知局限

  • 部分 Flutter / 自绘界面的 app 控件树稀疏,可能只能按 Activity 或整个应用计时
  • 目标 app 大版本更新后 id 可能变化,规则失效时删掉重采即可
  • 熄屏会立即结束会话;息屏前最后一段照常入账
  • MIUI 等系统覆盖安装后无障碍服务不会自动重连:主界面会显示 ⚠️ 提示,把开关关一次再开即可
  • 规则只认 Activity 时,若开启监测的瞬间人已在目标页面内,可能要等下次进入页面才命中——采集负样本生成「控件指纹兜底」条件组可消除此问题

后续可做

  • 高级模式:手动查看/编辑控件树指纹
  • 更长周期的统计视图(月/年)
  • 社区规则订阅(远程规则源)

About

咋还在刷 🌱 安卓短视频防沉迷:自己采样生成页面识别规则,刷短视频自动计时,超额全屏拦截请你去摸草。纯本地运行,不联网。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages