Android ⇄ PC 剪贴板实时同步方案总结:ShortX + ntfy + WebSocket

在多设备协作场景中,剪贴板同步往往是最容易被忽视、却又最频繁使用的一类能力。

这篇文章记录的是我近期完成的一次实践:
基于 ntfy,自建消息中枢,实现 Windows 与 Android 多端剪贴板的实时同步,并通过 ShortX 自动化任务,让 Android 设备也成为对等节点。

本项目为个人项目,由 AI 辅助生成,在此基础上进行大量人工调试、修改与优化完成,用于学习、研究与效率提升。

一、目标:真正的“多端对等同步”

很多现成方案存在一些共性问题:

  • 依赖第三方云服务
  • 需要登录账号
  • 同步链路不透明
  • Android 端受系统限制严重
  • 延迟不可控

这次实践的目标非常明确:

  • Windows ⇄ Android ⇄ Android
  • 任意一端复制,其他端立刻可用
  • 不区分“主端 / 从端”
  • 不依赖账号体系
  • 同步链路完全可控

最终采用的方案是:

ntfy 作为消息中枢 + WebSocket 实时推送 + 本地自动化逻辑

二、整体架构说明

整体结构可以用一张非常简单的逻辑图表示:

Android(ShortX)
        ↑   ↓
       ntfy(上行:HTTP POST 下行:WebSocket)
        ↑   ↓
Windows(Python GUI 程序)

所有设备都订阅同一个 ntfy topic,并同时具备发送与接收能力。

三、为什么选择 ntfy

选择 ntfy 的原因非常现实:

  • 支持 HTTP POST(发送简单)
  • 支持 WebSocket(实时下行)
  • 可自建(Docker / 二进制)
  • 不强制鉴权
  • 消息模型非常贴合“剪贴板内容”

在这个项目中,剪贴板内容就是消息体本身,不需要复杂协议。

四、Windows 端实现(Python GUI)

功能概览

Windows 端是一个 Python + Tkinter 编写的 GUI 程序,主要功能包括:

  • 监听本地剪贴板变化
  • 自动 POST 到 ntfy
  • WebSocket 实时接收下行消息
  • 写入本地剪贴板
  • 关键词过滤(发送 / 接收)
  • 回环抑制(防止无限同步)
  • 系统托盘后台运行
  • Windows 通知提醒
  • 开机自启动(支持中文路径)
  • 实时日志输出窗口

剪贴板回环问题的处理

剪贴板同步的最大难点不是“能不能同步”,而是:如何避免同步自己刚刚写入的内容

Windows 端采用了多层抑制策略:

  • 最近一次本地写入记录
  • 下行写入后的时间窗口抑制
  • 完全一致内容直接丢弃

三层叠加后,可以在多设备环境下稳定运行,不产生回环。

实时日志窗口的必要性

程序 GUI 底部提供一个 实时日志输出窗口,用于显示:

  • WebSocket 连接状态
  • ntfy POST 成功 / 失败
  • 过滤命中
  • 抑制触发
  • 自启动脚本写入情况

相比只写日志文件,实时窗口在调试和排错时价值非常高。

五、Android 端实现:ShortX 自动化任务

为什么不是普通 Android App

Android 对剪贴板监听有诸多限制:

  • 后台限制严格
  • 普通 App 很难长期运行
  • 权限受限

因此选择使用 ShortX 自动化框架,它本质上是一个系统级自动化执行器,非常适合事件驱动逻辑。

ShortX 在这个项目中做了什么

在 Android 端,ShortX 主要完成:

  • 监听系统剪贴板变化
  • 内容变化 → HTTP POST 到 ntfy
  • 长连接 WebSocket 订阅 ntfy
  • 收到消息 → 写入系统剪贴板
  • 过滤规则与抑制窗口逻辑

Android ⇄ Windows 的统一模型

无论是 Windows 程序,还是 Android 的 ShortX 任务,通信模型完全一致:

  • 上行:HTTP POST
  • 下行:WebSocket

这意味着:

  • 不需要区分平台
  • 不需要中转服务器
  • 任意设备都可以随时加入或退出

六、为什么必须使用 WebSocket

整个同步链路采用 WebSocket 实时推送,而不是轮询:

  • 延迟极低
  • 几乎是“复制即到达”
  • 请求数量极少
  • 对 Android 更省电

在实际使用中,Android → PC 的体验几乎是瞬时完成。

七、开机自启动与中文路径问题

Windows 端采用 启动文件夹 + bat 的方式实现自启动,但过程中踩了不少坑:

  • exe 路径包含中文
  • 使用 cd 导致路径丢失
  • bat 编码不正确
  • PyInstaller onefile 路径变化

最终稳定方案是:

  • bat 不使用 cd
  • 全路径 start “” “xxx.exe”
  • UTF-8 BOM 写入
  • 自动更新当前 exe 路径

即使程序目录是中文,也可以稳定自启动。

八、安全与使用边界说明

必须强调一点:

  • ntfy 默认 topic 是公开的
  • 同一 topic 下的所有客户端都能看到消息
  • 剪贴板内容可能包含敏感信息

因此这套方案:

  • 更适合自建 ntfy
  • 使用随机 topic
  • 配合关键词过滤
  • 只用于可信设备之间

九、关于本项目

  • 项目性质:个人项目
  • 实现方式:AI 辅助生成 + 人工调试与修复
  • 使用目的:学习、实践、效率提升

安卓教程:

PC教程:

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容