Turn your Android device into a headless application server for Windows.
Keywords:scrcpy·Android apps on Windows·virtual display·headless Android·USB mirroring·Rust
Duo 是一款基于 Rust 开发的 Windows 桌面应用。通过编排 scrcpy 与 adb,将安卓设备转化为电脑的无头应用服务器:手机熄屏插电、USB 直连电脑,即可在 Windows 大屏上以原生键鼠体验流畅运行各类安卓应用(背单词、阅读、视频等)。手机端屏幕全程熄灭,无发热与电量焦虑。
- 应用会话(Virtual Display):在独立 2560×1440 虚拟显示屏中启动应用,完全不干扰物理屏。窗口具备原生 Windows 窗口行为,支持自由拖拽缩放、方向信 APP、异步下发尺寸。
- 整机镜像:一键把整个设备画面投进 Windows 窗口,等比缩放,键鼠可直接操控整机。
- 窗口体验与沉浸交互:无边框窗口设计,搭配 C# overlay 现场编译呈现的悬停胶囊与下巴控件;内置防旋转风暴机制,控制台调用全局静默(
CREATE_NO_WINDOW),杜绝黑框闪烁。 - 高品质低延迟传输:自动探测硬件编码器(H.264 优先),60fps 基准,支持 FLAC 音频传输与单会话独占仲裁,提供 1.0×~3.0× 渲染倍率线性换算。
初代 Python 验证栈(pyduo)已退役,完整生平与找回方式见 docs/history/pyduo.md。
Scoop 以用户身份安装到 ~\scoop,自动配置 PATH,无需管理员权限。在
PowerShell(Windows 10/11 自带)中执行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.dev | iex
scoop install git # scoop 自更新与 bucket 依赖 git,装完推荐执行scoop install adb scrcpy两个包都在 scoop 默认 main bucket,与上游同步发版。Duo 需要
scrcpy ≥ 4.1(依赖 --new-display / --flex-display 等虚拟屏特性);
推荐 scrcpy ≥ 5.0(2026-10 发版,电脑侧硬件解码默认开启,CPU 占用
约降 10×,设置页「投屏质量 → 硬件解码」可回退软解),装完可用
scrcpy --version 确认。
不想用 Scoop 亦可:手动下载 platform-tools
与 scrcpy 解压后加入
PATH,或在 Duo 设置页「引擎」卡中填写 adb.exe / scrcpy.exe 绝对路径。
scoop update # 先更新 scoop 自身与 bucket 索引
scoop update adb scrcpy # 升级到上游最新版
scoop status # 查看待升级清单上游发版后 scoop bucket 通常当天跟进——比 SDK Manager 或手动下 zip 快得多,一条命令即完成升级与 PATH 维护。
- 手机开启「开发者选项」→「USB 调试」;
- 数据线连接电脑,首次连接在手机端勾选「一律允许此计算机进行调试」;
adb devices能看到设备即就绪。
也可无线使用(无需数据线):手机与电脑同一局域网,开启「开发者选项 →
无线调试」(成对/授权一次),在 Duo 首页设备卡点「无线」,输入设备
IP(如 192.168.1.100,缺省端口自动补 5555;随机端口则填
IP:端口)即可连接。USB 在线时同样可用——右键设备卡还能一键
「断开无线连接」。USB 与无线同时在线时默认走 USB(更稳更低延迟);
多台设备在线时点设备卡即弹设备列表切换(可给每台起名,悬浮行上
「改名」),拔掉数据线自动切到无线。
推荐:下载/构建标准安装包 Duo-<version>-setup.exe(约 6 MB)后双击安装:
- 每用户安装,免管理员;默认装
%LOCALAPPDATA%\Duo,C 盘紧张可在向导中改 安装到任意盘; - 卸载走控制面板「应用」或开始菜单 Duo 目录,用户数据默认保留、 卸载时可选一并清除。
从源码构建安装包(WSL):
git clone https://github.com/iluluyu/duo.git
cd duo
scripts/installer/build_setup.sh # 产物 dist/Duo-<version>-setup.exe或开发机直装(不产生 setup.exe):
cd C:\duo
powershell -ExecutionPolicy Bypass -File scripts\install-windows.ps1完整构建路径(WSL 交叉编译 / Windows 原生编译)与故障排查见 docs/windows-setup.md。
[UI 面板] Duo.exe (Rust / egui, src/rustduo/crates/duo-panel)
│ (命令行 / JSON-lines)
[核心引擎] duo-core.exe (Rust / CLI, src/rustduo/crates/duo-core)
├── C# 悬停控件 (DuoChromeOverlay.exe, csc.exe 现场编译) ──> 无边框窗口与胶囊交互
└── scrcpy 4.1+ 引擎(5.0+ 硬解)──> adb(USB / 无线)──> Android(无头应用服务器)
cd src/rustduo
cargo test # 282+ passed(duo-core + duo-panel)
cargo clippy --all-targets -- -D warnings
cargo fmt --all --check
./scripts/build_wsl.sh --deploy # WSL 交叉编译双 exe 并部署到 Windows出图调试(无设备截图):duo-panel --shot out.png --page home|settings --theme light|dark。
| 文档 | 作用与内容 |
|---|---|
| TODO.md | 唯一活任务清单:Windows 真机验收、挂起项、设计边界、出图对拍回路 |
| docs/windows-setup.md | Windows 安装、构建部署与故障排查 |
| docs/window-experience.md | 窗口/会话活规范:窗口行为合同、窗口栏三态、进程生命周期、玻璃总开关、平行视窗密度 |
| docs/mirroring-quality.md | 编码器、帧率、音频仲裁、DPI 密度与渲染倍率设计依据 |
| docs/ui/DESIGN.md | UI 材质四层、视觉令牌与组件验收硬性标准(铁律) |
| docs/ui/glass-recipe.md | 毛玻璃/液态玻璃配方唯一论述(菜单/岛/overlay 三端共用) |
| docs/ui/chin-island-acrylic.md | 下巴/沉浸岛机制链与定稿(Mica/acrylic/frost 通道实证) |
| docs/ui/RESEARCH-ICONS.md | 图标获取/统一化调研与设备端渲染方案 |
| docs/history/ | 冻结存档:pyduo 时代、迁移计划、窗口/overlay 实验、图标与玻璃调优轮次 |
| src/rustduo/README.md | Rust 模块设计、WSL 交叉编译与二进制规格说明 |
- 注释纪律:代码文件尽可能少写注释(单行、必要、解释 why),设计推导与决策写入
docs/对应域文档;轮次日志与被取代方案一律进docs/history/(冻结,不维护)。 - 质量门禁:
- Rust:
cargo test全绿 +cargo clippy --all-targets0 警告 +cargo fmt --check。 - C#:overlay(
src/rustduo/crates/duo-core/resources/chrome_overlay.cs)保持 C# 5 兼容(Windows 自带csc.exe现场编译)。
- Rust:
- Duo 本体:MIT
- 依赖第三方(scrcpy: Apache-2.0, adb 等)遵循其原有开源许可。