Skip to content
TianSC7Public

About

textsync 安卓与电脑剪切板同步

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

TextSync — 跨平台文本同步工具

💬 手机写,电脑贴。 在手机上输入文本,一键推送到 Windows 电脑并自动写入剪贴板,像「隔空复制」一样自然。

License: MIT Platform


📖 简介

TextSync 是一款轻量级、极速的跨平台文本同步工具,目的是彻底替代"用微信给自己发消息来中转文字"的繁琐流程。

⬇️ 下载预编译版本

以下为已编译好的可执行文件,可直接下载使用:

文件 平台 大小 说明
TextSync-app-release.apk Android ~17MB 适用于 arm64-v8a 设备(覆盖 95% 现代手机)
TextSyncDesktop.exe Windows ~215KB 需要安装 .NET 8.0 桌面运行时

Windows 使用提示

  • ⚠️ TextSyncDesktop.exe 为框架依赖发布,首次使用需安装 .NET 8.0 桌面运行时(约 50MB,仅需安装一次)
  • 双击即可运行,无需任何配置即可局域网使用

工作方式:

  1. 📱 在 Android 手机 App 中输入或粘贴文本
  2. 🚀 点击「推送到电脑」按钮
  3. 💻 文本即刻到达 Windows 电脑并自动写入系统剪贴板
  4. 📋 在任意应用中按 Ctrl + V 即可粘贴使用

✨ 核心特性

特性 说明
⚡ 局域网直连优先 同一 WiFi 下通过 TCP 直连,延迟 < 10ms
🌐 公网中转兜底 局域网不可用时自动切换 WebSocket 公网通道
🔒 安全认证 Token + 时间戳防重放 + SHA-256 checksum 三重防护
📝 笔记管理 支持多条笔记的创建、编辑、搜索、排序
🎯 选中文字推送 可在笔记中选中部分文字精准推送
📋 推送历史 完整记录每次推送的时间、方式、状态
🌙 深色模式 支持跟随系统或手动切换深色/浅色主题
🔄 自动重试 推送失败自动重试 3 次,保证送达率 ≥ 99.5%

🏗️ 系统架构

┌──────────────┐          ┌──────────────────┐
│  Android App │          │  Windows Client  │
│  (Flutter)   │          │  (.NET WPF)      │
└──────┬───────┘          └────────┬─────────┘
       │                           │
       │    ┌── 优先:局域网直连 ──┐
       │    │   TCP Socket :8899  │
       │    └─────────────────────┘
       │                           │
       │    ┌── 备用:公网中转 ────┐
       └───►│  Relay Server        │◄──────────┘
             │  WebSocket :4398    │
             └─────────────────────┘

双轨路由策略:

  1. 手机端点击发送 → 尝试局域网 TCP 直连(2s 超时)
  2. 连通 → 极速传输(< 10ms)
  3. 超时 → 自动切换公网 WebSocket 中转(~300ms)

📂 项目结构

TextSync/
├── android/                          # 📱 Android 端 (Flutter)
│   ├── lib/
│   │   ├── main.dart                 # 应用入口
│   │   ├── app.dart                  # MaterialApp 配置 + 路由
│   │   ├── models/                   # 数据模型
│   │   │   ├── note.dart             # 笔记模型
│   │   │   ├── push_record.dart      # 推送历史模型
│   │   │   └── sync_message.dart     # 通信协议模型
│   │   ├── services/                 # 服务层
│   │   │   ├── auth_service.dart     # 安全认证
│   │   │   ├── push_service.dart     # 推送抽象接口
│   │   │   ├── tcp_push_service.dart # 局域网 TCP 推送
│   │   │   ├── websocket_push_service.dart # 公网 WebSocket 推送
│   │   │   ├── settings_service.dart # 设置持久化
│   │   │   └── database_service.dart # SQLite 数据库
│   │   ├── providers/                # 状态管理 (Provider)
│   │   ├── pages/                    # 页面
│   │   │   ├── home_page.dart        # 主页壳(侧边栏)
│   │   │   ├── note_list_page.dart   # 笔记列表
│   │   │   ├── note_edit_page.dart   # 笔记编辑
│   │   │   ├── push_history_page.dart# 推送历史
│   │   │   └── settings_page.dart    # 设置页
│   │   ├── widgets/                  # 可复用组件
│   │   └── utils/                    # 工具函数
│   └── test/                         # 单元测试
│
├── desktop/                          # 💻 Windows 端 (.NET WPF)
│   ├── App.xaml / App.xaml.cs        # 应用入口 + 单实例
│   ├── MainWindow.xaml / .cs         # 主窗口
│   ├── SettingsWindow.xaml / .cs     # 设置窗口
│   ├── Models/
│   │   ├── SyncMessage.cs            # 通信协议模型
│   │   └── AppSettings.cs            # 设置模型
│   ├── Services/
│   │   ├── TcpListenerService.cs     # TCP 监听 (LAN)
│   │   ├── WebSocketClientService.cs # WebSocket 客户端 (WAN)
│   │   ├── ClipboardService.cs       # 剪贴板写入
│   │   ├── SecurityService.cs        # 安全校验
│   │   ├── NotificationService.cs    # 桌面通知
│   │   └── StartupService.cs         # 开机自启
│   ├── ViewModels/                   # MVVM ViewModel
│   └── Helpers/                      # 常量 + 托盘图标
│
├── server/                           # 🌐 中转服务器 (ASP.NET Core)
│   ├── Program.cs                    # 应用入口 + 路由
│   ├── appsettings.json              # 服务器配置
│   ├── Models/
│   │   └── PushRequest.cs            # 推送请求模型
│   ├── Services/
│   │   ├── WebSocketManager.cs       # WebSocket 连接池
│   │   └── AuthService.cs            # 服务端认证
│   └── Middleware/
│       └── RequestValidationMiddleware.cs # 请求验证中间件
│
├── SOP.md                            # 开发标准作业程序
├── README.md                         # 本文件
└── LICENSE                           # MIT 许可证

🚀 快速开始

环境要求

端 环境 版本
Android Flutter SDK ≥ 3.1.0
Android Dart SDK ≥ 3.1.0
Windows .NET SDK ≥ 8.0
Server .NET Runtime ≥ 8.0

构建 Android APK

# 进入 Android 项目目录
cd android

# 获取依赖
flutter pub get

# 构建分 ABI 的 release APK(精简+混淆)
flutter build apk --release --split-per-abi --obfuscate --split-debug-info=debug-info

# 产物位于: build/app/outputs/flutter-apk/
#   app-arm64-v8a-release.apk   ~17MB(推荐,覆盖 95% 设备)
#   app-armeabi-v7a-release.apk ~15MB(兼容老旧设备)
#   app-x86_64-release.apk      ~19MB(模拟器用)

构建 Windows EXE

⚠️ 此 EXE 为框架依赖发布,需要安装 .NET 8.0 桌面运行时(约 50MB,仅需安装一次)。

# 进入桌面端项目目录
cd desktop

# 发布单文件 EXE(框架依赖,仅 ~215KB)
dotnet publish -c Release --no-self-contained -p:PublishSingleFile=true \
  -p:DebugType=none -o ./publish

# 产物位于: desktop/publish/TextSyncDesktop.exe

部署中转服务器(可选)

如果你需要公网中转功能,需要部署一台服务器:

# 1. 进入服务端目录
cd server

# 2. 配置 appsettings.json(设置你的 Token)
# 3. 发布
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish

# 4. 将 publish 目录上传到你的 Linux 服务器
# 5. 运行
./TextSyncServer

提示: 局域网直连模式不需要中转服务器。只有在手机和电脑不同网络时才需要。


⚙️ 配置说明

首次使用

  1. 在手机端安装 APK,在电脑端运行 EXE
  2. 打开手机端「设置」
  3. 填写统一的 Token(通信密码) — 手机和电脑必须一致
  4. (可选)填写中转服务器地址(如使用公网功能)
  5. (可选)填写电脑局域网 IP(用于局域网直连,路由器建议绑定固定 IP)

通信协议

所有网络传输使用 JSON 格式:

{
  "token": "YOUR_SECRET_TOKEN",
  "timestamp": 1717574400000,
  "type": "text",
  "content": "要同步的文本内容",
  "checksum": "sha256-of-content"
}
字段 说明
token 通信密钥,三端必须一致
timestamp Unix 毫秒时间戳,防重放攻击
type 消息类型(当前仅 text)
content 实际同步的文本内容
checksum SHA-256(content) 十六进制字符串

🔧 开发环境

Android 端

  • 框架: Flutter 3.x (Dart)
  • 状态管理: Provider
  • 本地存储: sqflite (SQLite)
  • 主题: Material Design 3

Windows 端

  • 框架: .NET 8.0 WPF
  • 架构: MVVM
  • 剪贴板: System.Windows.Clipboard(带重试机制)
  • 托盘: System.Windows.Forms.NotifyIcon

中转服务器

  • 框架: ASP.NET Core 8.0 Minimal API
  • WebSocket: 原生 System.Net.WebSockets
  • 部署: 单二进制文件 + 零外部依赖

📜 开源协议

本项目基于 MIT License 开源,你可以自由地使用、修改和分发。


📬 联系


TextSync — 让文字在设备间自由流动。

About

textsync 安卓与电脑剪切板同步

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages