一个基于 Flutter 的 Android frpc 客户端:在手机上运行 frpc,通过 STCP / XTCP / XUDP 安全访问内网设备,支持 TCP/UDP P2P、自动中继与路径恢复。
- ✅ STCP / XTCP 应用配置:手机作为 visitor,安全访问对端 frpc 暴露的服务(SSH、ADB 等)
- ✅ XTCP P2P 打洞:NAT 打洞直连,失败自动回落 STCP 中继(
fallbackTo) - ✅ XUDP P2P:基于 frp-xudp 的 QUIC DATAGRAM,P2P 失败时自动 Relay,并周期恢复直连
- ✅ 分组管理:同一应用的 stcp/xtcp 归为一组,仪表盘按应用显示连接状态
Important
XUDP 不能只替换 Android 端。 同一条 XUDP 链路中的 frps、提供服务的
frpc 和作为 visitor 的 frpc(本应用)必须全部部署兼容的
GBitCat/frp-xudp 版本,建议保持完全相同的
Release。不要将官方 fatedier/frp、其他 fork 或不同版本与 XUDP 节点混用。
当前 APK 内置版本为 v0.71.0-v2,其余节点应优先使用同一版本。
- ✅ 多 Server 连接配置:命名、8 位 ID、transport 参数(protocol / tcpMux / heartbeat / keepalive)
- ✅ 应用配置:表单式编辑(协议、本地 IP/端口、secretKey、加密/压缩、fallback)+ 手动编写 TOML
- ✅ Server 配置预览:全局段 + 该 Server 下所有启用应用配置拼接,带分组注释
- ✅ 对端配置推导:一键生成对端 frpc 配置并复制
- ✅ 导入 / 导出:默认脱敏 zip;需要迁移凭据时使用密码加密备份
- ✅ Server 卡片:一键开关、连接状态(Active / 未启动)、连接方式(P2P / 中继)
- ✅ 网络与内存:IPv4 / IPv6、App + frpc 真实 RSS 占用(按设备总内存显示 RAM %)
- ✅ 应用状态列表:按应用分组显示 stcp/xtcp 连接状态
- ✅ 前台服务 + 常驻通知:后台持续运行,不易被系统回收
- ✅ 开机自启:设备重启后自动恢复连接
- ✅ 进程重建自动恢复 frpc:无需手动再次启动
- ✅ 省电策略提醒:首次启动弹窗提醒,一键跳转取消电池优化
- ✅ 玻璃 / 折射风格 UI:透明玻璃导航栏、毛玻璃弹窗
- ✅ 主题:浅色 / 深色 / 跟随系统 + 7 种主题色,持久化保存
- ✅ 日志查看:frpc 运行日志实时查看
- 下载 APK:从 Releases 页面下载最新版本(
arm64-v8a) - 安装并打开:首次启动会弹出省电策略提醒,建议允许通知并取消电池优化
- 添加 Server:配置区 → Server → 添加你的 frps 服务器(地址、端口、token)
- 添加应用配置:配置区 → 应用 → 添加 STCP / XTCP / XUDP 应用(选择所属 Server、协议、对端名称、secretKey);使用 XUDP 前请先确认全部节点均已部署兼容的
frp-xudp - 启动连接:仪表盘 → 打开 Server 开关
- 访问对端:在手机上连接本地 visitor 端口(如
127.0.0.1:39522)即可访问对端设备
- Flutter 3.x(stable)
- JDK 21
- Android SDK
- Git
git clone https://github.com/GBitCat/FRP-for-Android.git
cd FRP-for-Android/flutter_app
flutter pub get
flutter build apk --release
# 输出:build/app/outputs/flutter-apk/app-release.apk
libfrpc.so来自GBitCat/frp-xudp的校验发布资产,已打包在android/app/src/main/jniLibs/arm64-v8a/,无需额外下载。当前 APK 仅支持arm64-v8a;版本、摘要和更新流程见 FRPC_BINARY.md。
FRP-for-Android/
├── flutter_app/
│ ├── lib/
│ │ ├── main.dart # 入口
│ │ ├── theme.dart # 主题(模式 / 主题色)
│ │ ├── models/ # 数据模型
│ │ │ ├── frp_config.dart # 应用配置
│ │ │ ├── server_config.dart # Server 配置
│ │ │ └── connection_status.dart
│ │ ├── services/
│ │ │ ├── frp_engine.dart # MethodChannel 桥接
│ │ │ ├── config_store.dart # SharedPreferences 存储
│ │ │ ├── toml_generator.dart # TOML 生成 / 预览
│ │ │ └── config_import_export.dart # 导入导出
│ │ ├── state/
│ │ │ └── app_state.dart # 全局状态
│ │ ├── screens/ # 仪表盘 / 配置 / 设置 / 编辑 / 日志
│ │ └── widgets/ # 玻璃导航栏 / 毛玻璃弹窗 / 卡片
│ ├── android/app/src/main/
│ │ ├── kotlin/com/frp/frp_app/
│ │ │ ├── MainActivity.kt # Flutter 桥接
│ │ │ ├── FrpcService.kt # 前台服务(frpc 进程管理 / 通知)
│ │ │ └── BootReceiver.kt # 开机自启
│ │ └── jniLibs/arm64-v8a/libfrpc.so
│ └── pubspec.yaml
└── scripts/ # 辅助脚本
- Server:管理多个 frps 服务器连接;可命名、编辑、预览拼接配置、切换当前 Server
- 应用配置:添加 STCP / XTCP / 手动编写配置;同组配置归为一个应用(仪表盘统一显示状态)
- 导入 / 导出:默认导出不含凭据;密码加密备份可安全迁移完整配置
- Server 卡片:开关启动 / 停止,显示 Active / 未启动与连接方式
- 内存卡片:显示 App + frpc 的 RSS 占用,进度条按设备实际内存计算(RAM %)
- 主题模式 / 主题色、隐藏最近任务、日志查看、导入导出、版本信息
serverAddr = "frp.example.com"
serverPort = 7000
auth.token = "your_token"
transport.protocol = "tcp"
transport.tcpMux = true
transport.heartbeatInterval = 30
transport.heartbeatTimeout = 90
transport.tcpMuxKeepaliveInterval = 30[[visitors]]
name = "cachyos-xtcp-ssh"
type = "xtcp"
serverName = "xtcp_ssh"
secretKey = "your_secret_key"
bindPort = 39522
fallbackTo = "cachyos-stcp-ssh"
fallbackTimeoutMs = 3000[[proxies]]
name = "xtcp_ssh"
type = "xtcp"
localIP = "192.168.1.18"
localPort = 22
secretKey = "your_secret_key"- 架构:仅支持
arm64-v8a(绝大多数现代 Android 手机) - Android 版本:建议 Android 8.0+(API 26+);Android 13+ 需要允许通知权限
- frps 端:需在 frps 上配置对应的 stcp/xtcp 代理,且对端设备需运行 frpc 并注册相同 secretKey
- XUDP 全链路版本:
frps、XUDP proxy 端frpc、XUDP visitor 端frpc必须全部使用兼容的GBitCat/frp-xudp,推荐统一为当前内置的v0.71.0-v2;不能只在 Android 端替换,也不要与官方 FRP 或其他 fork 混用 - 后台驻留:为保证长时间稳定连接,请允许通知权限、取消电池优化(应用内首次启动会引导跳转),部分国产 ROM 还需在系统设置中允许后台运行
- 内存显示:卡片显示的是 App 与 frpc 进程的 RSS 占用,按设备总内存计算百分比
欢迎贡献代码与反馈 Issues!
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- FRP - Fast Reverse Proxy
- Flutter - UI 框架
- UI 风格参考 FlClash 与 liquid_glacier
⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!