自我约束方案:GrapheneOS 防沉迷与隐私强化
方案来源
GitLab 用户 bluedostoyevsky 在 Pixel 8a 上跑的 GrapheneOS + OwnDroid 组合方案——最初是为了解决"自己管不住自己浏览垃圾网站和沉迷短视频"的问题。核心思路:
让设备来阻止我,而不是我来阻止自己。
整套组合:
| 应用 | 作用 |
|---|---|
| OwnDroid | Device Owner——执行所有硬限制 |
| ReThinkDNS | 开源设备级 DNS 过滤——屏蔽垃圾域名 |
| timelimit.io | 时间限制 App——给娱乐 App 加上每日上限 |
| Automate | 自动化——VPN App 重启后自动触发重连广播 |
| Clipeus | 剪贴板定时清空——防止敏感信息残留 |
为什么 GrapheneOS
GrapheneOS 是 AOSP 的强化安全分支——没有 Google 服务、没有厂商定制干扰、没有后台杀后台、支持 GMS(但默认不装)。这意味着:
- OwnDroid Device Owner 激活一路顺畅
- ReThinkDNS Always-on VPN 不会被后台杀掉(不像 MIUI/HyperOS)
- 没有厂商级的安全功能和 OwnDroid 冲突
激活 OwnDroid Device Owner
bluedostoyevsky 的路径(GrapheneOS + Pixel):
- 恢复出厂设置(用 GrapheneOS 自带的强制定位 PIN 模式)
- 不登录任何账号、不创建任何用户
- 用 NeoStore(内置 IzzyOnDroid 仓库)安装 OwnDroid + Shizuku
- 开发者选项开无线调试 → Shizuku 启动 → OwnDroid 选 Shizuku 路径 → Success
- 如果 Shizuku 路径失败:直接电脑 adb 一条命令搞定:
adb shell dpm set-device-owner --user 0 com.bintianqi.owndroid/.Receiver
- OwnDroid 盾牌亮起后,关闭 Shizuku 和开发者选项
配置步骤(按顺序)
1. ReThinkDNS DNS 过滤优先跑起来
- 给全权限
- 手动添加要拦截的域名列表(色情、赌博、垃圾新闻、短视频)
- 开「设备级 Block」(on device block,DNS 解析在本地完成,不依赖服务器)
- 开「阻止 Private DNS 绕过」(防止 Android 设置里的 Private DNS 绕过过滤)
- 开「Automation」并加入 Automate 应用包名——让 Automate 可以触发 ReThinkDNS 内部的 start 广播
- 启动 ReThinkDNS——确保网络正常
2. timelimit.io 时间限制
- 给全权限
- Profile:用本地版(不需要云服务)
- 24/7 Block 规则:给 Automate App——任何时候都不能被 block(因为需要靠它发广播触发 VPN 重连)
- Night Block 规则:每天 22:00 - 7:00 block 所有娱乐 App
- Screen Time 规则:游戏/短视频 App 每天上限 30 分钟
- 默认规则:新安装的 App 直接套 Night Block + Screen Time,防止忘了配置
3. Automate 重连广播
- 创建一个 Flow 叫 "start"
- Trigger:Broadcast(ReThinkDNS 的 start Intent)
- Action:发送广播给 ReThinkDNS 触发 start
- 把这个 Flow 放到桌面 Widget
用途:ReThinkDNS 有时候重启后不会自动连接——有了 Automate,OwnDroid 挂起 ReThinkDNS(不影响后台)但用户还能通过 Automate Widget 触发重连广播。
4. OwnDroid 硬限制
Always-on VPN:
- OwnDroid → 网络 → Always-on VPN → 选 ReThinkDNS
- 打开 VPN Lockdown(强制 VPN 模式)
用户限制:
- ✅ no_add_managed_profile(禁止创建工作资料,防止被绕过)
- ✅ no_add_private_space(禁止私密空间)
- ✅ no_add_user(禁止创建新用户)
- ✅ no_debugging_features(禁止开发者调试)
- ✅ no_factory_reset(禁止恢复出厂设置)
应用管控:
- 对 ReThinkDNS:阻止卸载 + 禁用用户控制 + 挂起(后台继续运行但界面打不开)
- 对 timelimit:阻止卸载 + 禁用用户控制 + 挂起
- 对 Automate:阻止卸载 + 禁用用户控制
- OwnDroid 自身:打开应用锁密码
5. 剪贴板 Clipeus
Clipeus 定期清空剪贴板——当你打开 OwnDroid 修改密码或配置时输入的敏感信息不会留在剪贴板里。
这套方案的效果
- 想访问被拦截的垃圾网站?DNS 被过滤了,打不开
- 想关闭 ReThinkDNS?被挂起了,界面打不开;就算能打开,关闭后 VPN Lockdown 会让整个设备断网
- 想卸载 ReThinkDNS?阻止卸载,卸不掉
- 想从设置里禁用 ReThinkDNS?禁用用户控制,设置里的按钮灰了
- 想创建新用户绕过管控?no_add_user,创建不了
- 想恢复出厂设置?no_factory_reset,按钮灰了
- 想卸载 OwnDroid?Device Owner 状态下本身无法被卸载
- 每天游戏时间超过 30 分钟?timelimit 直接 block 游戏 App
- 晚上想刷短视频?timelimit 的 Night Block 规则生效,全部被 block
唯一的弱点
这套组合能被绕过的唯一方法是:ADB 连接电脑发送 OwnDroid API 调用(如果你还能连上电脑且记得 API Key),或者手动 adb shell 调用 dpm 命令先 deactivate OwnDroid 的 Device Owner 权限。所以关键是——保管好 API Key,不要让自己在"想绕过"的时候还能访问 adb。