yogesh-7/AppFence
GitHub: yogesh-7/AppFence
一款无需 Root 的 Android 本地防火墙,按应用独立控制 Wi‑Fi 与移动数据。
Stars: 1 | Forks: 1
# AppFence
### 无需 Root 的 Android 每应用网络控制
一个轻量级的开源 Android 防火墙,可让您精细控制哪些应用可以访问 Wi-Fi 和移动数据。使用 Kotlin 和 Jetpack Compose 构建。







## ✨ 为何选择 AppFence?
- 🛡️ **阻止任意应用联网** — 阻止后台数据、广告和遥测
- 📶 **按网络独立规则** — 允许应用在 Wi-Fi 仅用、仅移动数据、两者或都不使用
- 🔓 **无需 Root** — 使用 Android 内置的 `VpnService`
- 🔒 **完全本地处理** — 无服务器、无分析、所有数据保留在设备内
- 🪶 **轻量高效** — 无数据包解析,电池占用极低
- 🎨 **现代化 UI** — 基于 Material 3 和 Jetpack Compose
## 工作原理
AppFence 使用 Android 的 `VpnService` 创建一个**本地设备级 VPN**。所有流量均不发送至远程服务器。
### 阻断机制
1. 当 VPN 激活时,**所有设备流量**被路由至本地隧道。
2. 被标记为**允许**的应用通过 `addDisallowedApplication()` 旁路隧道,直接使用真实网络。
3. 被**阻止**的应用流量进入隧道后被静默丢弃(永不转发)。
4. 切换应用访问权限时,隧道将在 **1 秒内** 重建并应用新规则。
### 每网络类型独立控制
- 每个应用在 Wi-Fi 和移动数据上拥有**独立**的开关。
- 应用通过 `ConnectivityManager.NetworkCallback` 监听当前网络类型。
- 当设备在 Wi-Fi 与蜂窝网络间切换时,隧道会自动重建,并应用对应网络类型的阻断规则。
## 📸 截图
## 🚀 快速开始
### 前提条件
- Android Studio Hedgehog (2024.1) 或更高版本
- JDK 17+
- 包含 `compileSdk 35` 的 Android SDK
- 运行 **Android 10 (API 29)** 或更高版本的设备或模拟器
### 从源码构建
```
# 克隆仓库
git clone https://github.com/yogesh-7/AppFence.git
cd AppFence
# 构建调试 APK
./gradlew assembleDebug
# APK 将位于:
# app/build/outputs/apk/debug/app-debug.apk
```
或者直接在 Android Studio 中打开项目并点击 **运行**。
### 首次运行
1. 按提示授予 VPN 权限(系统对话框)。
2. 主界面显示所有已安装应用。
3. 为任意应用切换 Wi-Fi 和/或移动数据开关。
4. 进入 **设置** 启动或停止 VPN 服务。
## 🔐 权限说明
| 权限 | 用途 |
|---|---|
| `BIND_VPN_SERVICE` | 创建本地 VPN 隧道所必需 |
| `FOREGROUND_SERVICE` | VPN 必须以前台服务运行(Android 要求) |
| `FOREGROUND_SERVICE_SPECIAL_USE` | Android 14+ 上用于 VPN 前台服务类型 |
| `RECEIVE_BOOT_COMPLETED` | 设备启动时自动启动 VPN(可选) |
| `ACCESS_NETWORK_STATE` | 检测 Wi-Fi 与蜂窝网络 |
| `QUERY_ALL_PACKAGES` | 列出所有已安装应用 |
| `POST_NOTIFICATIONS` | 显示 VPN 状态通知(Android 13+) |
## 🛠️ 技术栈
| 组件 | 技术 |
|---|---|
| 语言 | Kotlin 2.1.10 |
| UI | Jetpack Compose + Material 3 |
| 架构 | MVVM(ViewModel + StateFlow) |
| 数据库 | Room |
| 异步 | Kotlin Coroutines |
| 导航 | Navigation Compose |
| 最低 SDK | 29(Android 10) |
| 目标 SDK | 35(Android 15) |
| 后台 | 前台 VpnService |
| 启动 | BroadcastReceiver(BOOT_COMPLETED) |
## 📁 项目结构
```
com.yogesh.appfence/
├── AppFenceApp.kt # Application class
├── data/
│ ├── AppRule.kt # Room entity
│ ├── AppRuleDao.kt # Room DAO
│ ├── AppRuleDatabase.kt # Room database
│ └── AppRepository.kt # Repository
├── vpn/
│ ├── AppFenceVpnService.kt # VPN service (blocking logic)
│ └── NetworkMonitor.kt # Wi-Fi/cellular detection
├── receiver/
│ └── BootReceiver.kt # Auto-start on boot
├── ui/
│ ├── MainActivity.kt # Single-activity host
│ ├── theme/ # Material 3 dark theme
│ ├── screens/
│ │ ├── MainScreen.kt # App list with toggles
│ │ ├── SettingsScreen.kt # VPN control & preferences
│ │ └── OnboardingScreen.kt # First-run welcome
│ ├── components/
│ │ ├── AppListItem.kt # App row with toggles
│ │ ├── FilterBar.kt # All/User/System/Blocked chips
│ │ └── StatusBadge.kt # Allowed/Blocked badge
│ └── viewmodel/
│ ├── MainViewModel.kt # App list + rules
│ └── SettingsViewModel.kt # VPN state + preferences
├── model/
│ └── AppInfo.kt # UI models
└── util/
└── PackageUtils.kt # Load installed apps
```
## 🎯 设计原则
- **无需 Root** — 使用标准 Android VpnService API
- **无广告、无分析、无网络请求** — 永远如此
- **完全离线** — 所有数据保留在设备本地
- **省电设计** — 无数据包解析,仅 OS 级路由
- **开放架构** — 清晰的 MVVM 分层设计
## 🤝 贡献
**非常欢迎贡献** — 包括错误修复、功能改进、翻译、文档或截图!
### 适合新手的议题
查看标记为 [`good first issue`](https://github.com/yogesh-7/AppFence/labels/good%20first%20issue) 或 [`help wanted`](https://github.com/yogesh-7/AppFence/labels/help%20wanted) 的问题。
### Hacktoberfest 🎃
本仓库参与 **Hacktoberfest**!在十月期间关注标记为 [`hacktoberfest`](https://github.com/yogesh-7/AppFence/labels/hacktoberfest) 的问题。
### 如何贡献
1. Fork 本仓库
2. 创建功能分支(`git checkout -b feature/my-feature`)
3. 提交更改(`git commit -m 'Add my feature'`)
4. 推送到分支(`git push origin feature/my-feature`)
5. 发起 Pull Request
请遵循 Kotlin 编码规范并保持现有的 MVVM 结构。
## 💡 灵感来源
功能上受优秀的开源应用 [NetGuard](https://github.com/M66B/NetGuard)(作者 M66B)启发,采用现代化 Jetpack Compose UI 并简化了架构设计。
## 📄 许可证
AppFence 在 **GNU General Public License v3.0** 下发布。
请查阅 [LICENSE](LICENSE) 文件获取完整文本。
**⭐ 如果您觉得 AppFence 有用,请考虑给仓库加星!**
由 [@yogesh-7](https://github.com/yogesh-7) ❤️ 打造
标签:Android, Android开发, DNS解析, DSL, Hacktoberfest, Jetpack Compose, Kotlin, LangChain, MacOS取证, Material 3, PRs欢迎, VpnService, Wi-Fi控制, 后台数据阻止, 广告拦截, 应用白名单, 应用级网络控制, 应用黑名单, 开源, 开源项目, 无Root, 最小SDK 29, 本地VPN, 流量控制, 现代UI, 移动数据控制, 网络切换监控, 网络安全, 网络权限管理, 轻量级, 遥测阻断, 防火墙, 隐私保护