通过悬浮窗一键对任意已安装应用做网络限制(WiFi + 移动数据),无需 VPN。 支持 Shizuku(优先)与 Root(兜底)两种执行后端。
- 语言:Kotlin | minSdk 26(Android 8.0)| targetSdk 34(Android 14)
- 架构:MVVM + 前台 Service +
NetworkBlocker后端抽象层 - 依赖:Shizuku API 13.1.5、libsu 5.2.2、DataStore Preferences
app/src/main/java/com/hewanglan/netblocker/
├── App.kt # Application:libsu 初始化
├── MainActivity.kt # 权限引导 + 应用列表 + 搜索
├── core/
│ ├── NetworkBlocker.kt # 后端统一接口
│ ├── BackendDetector.kt # 后端探测(AUTO/SHIZUKU/ROOT)
│ ├── RuleEngine.kt # 规则调度(开关动作统一入口)
│ └── AppContextHolder.kt # 全局 Context
├── backend/
│ ├── IShellService.aidl # Shizuku 用户服务 AIDL(aidl/ 目录)
│ ├── ShellService.kt # shell uid 沙箱内执行命令(10s 超时)
│ ├── ShizukuBlocker.kt # Chain 3 优先 + netpolicy 降级
│ └── RootBlocker.kt # iptables 自定义链 NETBLOCK,幂等规则
├── data/
│ ├── AppRepository.kt # 已安装应用与 UID 映射
│ └── RuleStorage.kt # 规则持久化(DataStore)
├── service/
│ └── FloatingWindowService.kt # 悬浮球/面板/前台应用检测
└── receiver/
└── BootReceiver.kt # 开机恢复规则
- 用 Android Studio(Koala 以上,含 AGP 8.5 / JDK 17)打开本项目根目录;
- 首次同步会自动下载 Gradle 8.7 与依赖(Shizuku、libsu 来自 Maven Central / JitPack);
Build > Build APK(s)生成 APK。
仓库未包含 gradle-wrapper 二进制(jar),Android Studio 打开后会自动补齐;如需命令行构建,先运行一次
gradle wrapper。
- 悬浮窗:主界面点击"授权悬浮窗权限" → 在系统设置中允许显示在其他应用上层;
- Shizuku:安装 Shizuku → 通过无线调试或 Root 启动 → 回到本 App 点击"激活 Shizuku";
- 前台应用检测(悬浮窗一键断网需要):点击"授权前台应用检测" → 允许"使用情况访问权限";
- Root(可选兜底):在 Magisk/KernelSU 中授予本 App Root 权限。
| 后端 | 机制 | 说明 |
|---|---|---|
| Shizuku | cmd connectivity set-package-networking-enabled <bool> <pkg> |
Android 11+(Chain 3),等价系统联网控制;失败降级 cmd netpolicy add uid-policy <uid> 1(仅限制计费网络后台) |
| Root | iptables -A NETBLOCK -m owner --uid-owner <uid> -j DROP |
自定义链挂 OUTPUT,-C 判重幂等,-D 精准删除,-F NETBLOCK 一键清空 |
- 部分厂商 ROM 阉割
cmd connectivity→ 已留 netpolicy 降级路径,需实测机型矩阵(小米/华为/OPPO/vivo/三星/Pixel) - Shizuku 重启后授权失效的主动引导(当前仅提示)
- nftables 原生语法路径(当前依赖 iptables-nft 兼容层,绝大多数 ROM 可用)
- 卸载时自动清理 iptables 规则
- 悬浮窗贴边吸附、常用应用快捷开关(最多 3-5 个)
- 阶段五稳定性项:日志诊断、规则冲突检测、功耗控制
- 阶段六:定时规则、分组管理、流量统计、桌面小组件、Tasker 集成