专为 Yue.to 账号、AI 服务与流媒体场景打造的跨平台代理客户端
YueLink 是一个基于 Flutter + mihomo 构建的跨平台代理客户端,面向 Yue.to 账号体系做了完整集成:登录后可自动同步订阅、节点、套餐、订单、公告、签到和 Emby 媒体服务。
它既是一个日常可用的代理客户端,也是一个具备桌面增强能力的独立分发应用:支持 Android / iOS / macOS / Windows / Linux,支持 GitHub Release 自更新、桌面 TUN / Service Mode、模块运行时、启动诊断与一键修复。
- Yue.to 深度集成:账号登录、订阅同步、套餐购买、优惠券、订单历史、公告、签到、Emby 全链路接入。
- 多平台一致体验:Android / iOS 走系统 VPN 能力,桌面端默认系统代理,也支持切换 TUN。
- 独立分发优先:GitHub Releases 提供五端正式产物,应用内支持稳定版 / 预发布更新通道。
- 可开发、可扩展:Flutter UI + Go core 解耦,支持 mock mode、本地原生构建、CI 全平台发布。
| 能力域 | 当前能力 |
|---|---|
| 代理与连接 | 登录后自动同步订阅;多配置导入/导出;代理组切换;节点测速;延迟排序;规则 / 全局 / 直连路由模式;连接明细与日志页 |
| 桌面增强 | 系统代理模式;桌面 TUN 模式;Service Mode 特权辅助进程;托盘菜单;全局快捷键;开机启动;连接修复与启动报告 |
| 账号与运营 | 套餐展示;购买 / 续费;优惠码校验;订单历史;公告拉取;每日签到;账户与流量信息 |
| 流媒体 | Emby 媒体库首页、详情页、剧集页、原生播放器、断点续播、字幕和音轨控制、代理感知图片缓存 |
| 更新与发布 | GitHub Release 自更新;稳定版 / 预发布双通道;SHA-256 校验;多镜像 manifest 拉取 |
| 安全与隐私 | 凭据走系统 SecureStorage(Android Keystore / iOS Keychain / Windows DPAPI / macOS AES-256-GCM 文件);诊断日志导出前自动脱敏 13 类 PII(路径、Bearer、订阅 URL、邮箱、公网 IPv4、UUID、MAC 等) |
| 国际化 | 简体中文 / English 双语,跟随系统语言或手动锁定 |
- 基于 mihomo 内核,Flutter 通过 FFI 管理生命周期,通过 REST / WebSocket 获取代理、流量、日志和连接数据。
- Android 使用
VpnService + TUN (gVisor)。 - iOS 使用
NetworkExtension / PacketTunnel。 - 桌面端默认
systemProxy,可切换TUN;必要时可安装Service Mode特权 helper。 - 路由模式支持 规则 / 全局 / 直连,全局模式下点击任意 group 节点会自动同步到 GLOBAL 出口;直连模式禁用所有 group 卡避免误点。
- Netflix 风格首页:Hero Banner + 横向海报行。
- 原生播放器:倍速、字幕大小、音轨切换、播放进度同步、续播提示。
- 兼容 STRM 搬运库和合集库。
- API、图片、视频、字幕都走代理链路。
YueLink 内置一套可用的 Surge 模块兼容层:.sgmodule 下载 / 解析 / 启用,规则注入到 mihomo YAML,MITM Engine 与 Root CA 生成,URL Rewrite 与 Header Rewrite,以及 http-response 响应脚本。定位是最小可用实现,不是完整 Surge Script 运行时,也不能绕过 Android 7+ 的用户 CA 信任限制和 Certificate Pinning。
详见:
- 设置页内置连接修复页面:重建 VPN、清理缓存、重同步订阅、一键修复。
- 启动失败会自动生成
startup_report.json,记录启动步骤、错误码、耗时、核心日志摘要。 - 桌面端支持托盘菜单、显示主窗口快捷键、连接模式切换、开机启动。
正式版与预发布版均通过 GitHub Releases 分发:
- Release 列表:https://github.com/onesyue/yuelink/releases
- 稳定版 tag:
vX.Y.Z - 预发布 tag:
pre(覆盖式),或vX.Y.Z-pre
| 文件 | 适用平台 | 说明 |
|---|---|---|
YueLink-<version>-android-universal.apk |
Android | 默认推荐;绝大多数用户下载这个即可 |
YueLink-<version>-android-arm64-v8a.apk |
Android | 64 位 ARM 设备专用 |
YueLink-<version>-android-armeabi-v7a.apk |
Android | 32 位 ARM 设备专用 |
YueLink-<version>-android-x86_64.apk |
Android | x86_64 设备或模拟器 |
YueLink-<version>-ios.ipa |
iOS | SideStore / AltStore 侧载包;TrollStore 不推荐(VPN 无效) |
YueLink-<version>-macos-universal.dmg |
macOS | Intel + Apple Silicon 通用 DMG |
YueLink-<version>-windows-amd64-setup.exe |
Windows | 默认推荐安装版 |
YueLink-<version>-windows-amd64-portable.zip |
Windows | 免安装便携版 |
YueLink-<version>-linux-amd64.AppImage |
Linux | x86_64 AppImage |
每次发布附一份统一的 YueLink-<version>-SHA256SUMS 校验文件,可用 sha256sum -c YueLink-<version>-SHA256SUMS 一次性校验所有产物。
- Android:优先下载
android-universal.apk,只有明确知道设备架构时再选分 ABI 包。 - Windows:优先下载
setup.exe,需要绿色版时再用portable.zip。 - macOS:统一下载
macos-universal.dmg,无需区分 Intel 和 Apple Silicon。 - iOS:当前为独立分发侧载包,不走 App Store 安装。详见下方安装说明。
- 允许安装未知来源应用。
- 安装
YueLink-<version>-android-universal.apk。 - 首次启动时授予 VPN 权限;Android 13+ 还会请求通知权限(用于前台服务通知,建议授予)。
支持以下侧载方式:
- SideStore(推荐):VPN 完全可用。从 GitHub Releases 下载
YueLink-<version>-ios.ipa,在 SideStore 里点+选 ipa 文件 → SideStore 自签 + 自装。每次发新版重新下载 ipa 导入即可。 - AltStore:VPN 完全可用,但需要电脑上跑 AltServer.app 配对(Mac 拖 ipa 给 AltStore)。
- TrollStore(巨魔):安装永久不过期,但 VPN 几乎不工作 —— 系统会启动 PacketTunnel 进程后立刻丢弃,表现为「提示连接成功但实际无网络」。仅推荐在不需要代理的场景使用(例如只看 Emby)。
无论哪种方式,每 7 天自签会到期一次,到期前 SideStore / AltStore 会自动后台续签(前提是设备装过任一 SideStore extension 且能联网)。手动续签:重新进入 SideStore / AltStore 点击"Refresh"。
⚠️ iOS 巨魔用户重要提示 巨魔利用系统漏洞绕过签名校验,但 NetworkExtension 仍依赖 Apple 签发的 Provisioning Profile —— 巨魔安装的 IPA 拿不到这条信任链。若你需要代理上网,请改用 SideStore 或 AltStore 自签后重新安装。 App 检测到这个症状时(连接 3 秒内被系统中止)会自动弹出安装方式说明页。也可以在「设置 → 关于 → iOS 安装方式」主动查看。
- 打开
YueLink-<version>-macos-universal.dmg - 将
YueLink.app拖入Applications - 若首次启动被 Gatekeeper 拦截:
- 优先双击 DMG 内附带的
修复无法打开.command - 或手动执行
sudo xattr -cr /Applications/YueLink.app
- 优先双击 DMG 内附带的
- 安装版:运行
YueLink-<version>-windows-amd64-setup.exe - 便携版:解压
YueLink-<version>-windows-amd64-portable.zip后直接运行
chmod +x YueLink-<version>-linux-amd64.AppImage
./YueLink-<version>-linux-amd64.AppImage| 平台 | 最低系统 | 网络实现 | 分发形态 | 备注 |
|---|---|---|---|---|
| Android | Android 5.0 (API 21) | VpnService + TUN (gVisor) |
APK | 支持分应用代理;API 33+ 需通知权限以保活前台服务 |
| iOS | iOS 15.5 | PacketTunnel / NetworkExtension |
IPA | 侧载分发,推荐 SideStore / AltStore 自签 |
| macOS | macOS 10.15 (Catalina) | 默认系统代理,可切换桌面 TUN | DMG | 支持 Service Mode;自带 Gatekeeper 修复脚本 |
| Windows | Windows 10 1903+ x64 | 默认系统代理,可切换桌面 TUN | EXE / ZIP | 支持托盘、快捷键、Service Mode |
| Linux | 主流 x86_64 桌面发行版 | 默认系统代理,可切换桌面 TUN | AppImage | 支持 Service Mode、单实例锁、深度链接 |
- 移动端始终使用系统 VPN 能力,不提供系统代理模式切换。
- 桌面端默认连接模式为
systemProxy,适合大多数场景。 - 桌面 TUN 适合更完整的系统级接管需求;如需稳定的特权辅助,可安装
Service Mode。
YueLink 在独立分发版中内置自更新逻辑:
- 默认检查稳定版
update.json - 可在设置中切换到预发布通道
update-pre.json - manifest 支持多镜像拉取,适配 GitHub API 不稳定或受限网络环境
- 下载后会校验 SHA-256
iOS 用户每次发布新版本时,从 GitHub Releases 重新下载 .ipa 用 SideStore / AltStore 导入即可。
注意:
- 独立分发版:支持应用内检查更新和下载更新
- 商店模式构建:通过
--dart-define=STANDALONE=false编译,自更新入口会被关闭
| 工具 | 版本要求 | 备注 |
|---|---|---|
| Flutter | >= 3.38.4 |
CI 当前使用 3.41.7 |
| Dart | >= 3.10.3 |
随 Flutter 安装 |
| Go | >= 1.22 |
CI 当前使用 1.26.2 |
| Xcode | >= 15 |
iOS / macOS 构建 |
| Android NDK | r26+ |
Android 原生构建 |
不需要 Go core,也能跑完整 UI:
git clone --recursive https://github.com/onesyue/yuelink.git
cd yuelink
flutter pub get
flutter run当本地没有原生内核时,YueLink 会自动进入 mock mode,用模拟的代理组、节点、流量和连接数据驱动界面。
core/mihomo/ 是 git 子模块,首次克隆必须带 --recursive,或者在已有仓库中执行:
git submodule update --init --recursive仓库 fork 自 MetaCubeX/mihomo(Meta 稳定通道),在主线之上叠加三个非破坏性补丁(非致命的 buildAndroidRules / 非致命的 MMDB+iptables 加载 / Shutdown 时清理监听器)。CI 与本地构建会自动应用同一份补丁集,应用是幂等的,重复执行不会失败。
git clone --recursive https://github.com/onesyue/yuelink.git
cd yuelink
flutter pub get
# 首次构建桌面端时启用对应平台
flutter config --enable-macos-desktop
flutter config --enable-windows-desktop
flutter config --enable-linux-desktop
# Android:构建全部 ABI
dart setup.dart build -p android
dart setup.dart install -p android
flutter build apk
# iOS:构建 arm64 静态库
dart setup.dart build -p ios
dart setup.dart install -p ios
flutter build ios
# Windows / Linux:建议显式指定 amd64
dart setup.dart build -p windows -a amd64
dart setup.dart install -p windows
flutter build windows
dart setup.dart build -p linux -a amd64
dart setup.dart install -p linux
flutter build linux
# macOS 见下方 universal 示例
flutter build macosmacOS 需要分别构建两个架构,再由 install 合并:
dart setup.dart build -p macos -a arm64
dart setup.dart build -p macos -a x86_64
dart setup.dart install -p macos
flutter build macos --release仓库提供了一个 Linux AppImage 打包脚本:
bash scripts/build_linux.sh <version>如需构建不带自更新能力的商店版本(自更新检查 + 应用内"检查更新"入口都会被禁用):
flutter build appbundle --dart-define=STANDALONE=falseflutter analyze --no-fatal-infos --no-fatal-warnings
bash scripts/check_imports.sh # 架构边界检查(modules 不能 import datasources)
flutter test当前仓库共 109 个 Dart 测试文件,覆盖核心 lifecycle / FFI、mihomo REST 客户端、流断路 / 重连、Riverpod 状态机、XBoard 容错、PII 脱敏等。CI 全平台 build 之外,还会跑 architecture import guard。
CI 只在推送 tag 或手动 workflow_dispatch 时触发:
pre:构建全平台预发布,覆盖上一个 pre-release,并刷新update-pre.jsonmanifestvX.Y.Z:构建全平台正式版,创建 GitHub Release,并刷新update.jsonmanifestvX.Y.Z-pre同样视为 pre-release(prerelease: true)
dev / master 分支的 push 不会触发 build.yml,仅触发 ci.yml(analyze + test + import guard)。
-
所有代码先合入
dev,触发ci.yml -
需要预发布时移动
pretag:git tag -d pre && git push origin :refs/tags/pre git tag pre && git push origin pre
-
正式版:
dev→master合入后再打vX.Y.Z并推送 -
CI 执行:应用
core/patches/*.patch→ 构建 Go 核心 →dart setup.dart install→ Flutter 打包 → 签名 / 归档 → 上传产物 → 创建 Release + manifest
发布矩阵覆盖 Android / iOS / macOS / Windows / Linux。产物由 CI 自动命名、统一汇总到一份 YueLink-<version>-SHA256SUMS、刷新 release notes 与 updater manifest。
GitHub Release body 取自 docs/releases/<tag>.md(稳定版)或 docs/releases/pre.md(fallback),保持版本说明三处同源(in-repo CHANGELOG / docs/releases / GitHub Release)。
| 路径 | 作用 |
|---|---|
lib/modules/ |
业务模块:登录、首页、节点、商店、设置、Emby、模块运行时等 |
lib/core/ |
核心运行层:FFI、内核生命周期、系统代理、Service Mode、SecureStorage |
lib/infrastructure/ |
数据源与仓储:XBoard API、mihomo REST / WebSocket、订阅同步 |
lib/domain/ |
纯数据模型 |
lib/shared/ |
通用工具与 UI 辅助、PII 脱敏 (diagnostic_report.dart) |
lib/i18n/ |
双语文案与 slang 生成代码 |
core/ |
Go 侧 mihomo 封装与补丁 |
service/ |
桌面特权 helper(macOS launchd / Windows SCM / Linux systemd) |
docs/ |
模块运行时与其它专题文档 |
docs/releases/ |
单版本 release notes,CI 直接作为 GitHub Release body |
使用 DMG 内附带的 修复无法打开.command,或执行:
sudo xattr -cr /Applications/YueLink.appAndroid 的 VpnService 只能在主用户空间可靠工作。Samsung Secure Folder 等二级用户环境无法建立有效 TUN(establish() 始终返回 null)。
几乎只在 TrollStore 安装的包上发生。NetworkExtension 信任链依赖 Apple 签发的 Provisioning Profile,巨魔的签名绕过覆盖不了这一条 —— 改用 SideStore 或 AltStore 自签即可。App 检测到这个症状时会自动弹出安装方式说明页。
这是 Android 用户 CA 信任限制和证书固定带来的已知边界,不是 YueLink 单独能绕过的问题。详见 模块已知限制。
这是商店模式构建的预期行为。STANDALONE=false 时,自更新逻辑会被关闭,以满足商店分发约束。