Repository navigation
DroidExtend 1.3.0
用一根 USB 数据线,把安卓手机变成 Windows 的第二块显示器 —— 是真的扩展桌面,
不是投屏镜像。
这一版几乎全在手机端,外加一处让画面真的「撑满」的能力。
手机端
- 有图标、有界面了。 图标是 Pillow 一个像素一个像素画的(蓝色圆角方块 + 白色显示器 + 白色手机),
含自适应图标前景层,mdpi 到 xxxhdpi 五种密度;以前 manifest 里根本没有android:icon,
桌面显示的一直是系统默认图标。 - 实时状态浮窗:左上角半透明面板,显示 分辨率 / 帧率 / 码率 / 延迟(含峰值)/ 画质,
延迟按 18 ms / 40 ms 两档染色(绿 → 琥珀 → 红),追帧时额外标出来。
整个浮窗是onDraw手绘的(没有 layout XML、没有每秒两次的 inflate),
只在右上角齿轮上吃触摸,其它位置的点按照常传给电脑。 - 设置面板:点齿轮打开,三个开关 —— 状态浮窗 / 让画面铺满屏幕(裁掉多余边缘)/ 把日志写到文件。
选择记在 SharedPreferences 里,重开 App 还在。 - 日志改成可选:默认只写 logcat;打开开关后写到
Android/data/com.droidextend/files/DroidExtend.log(不需要存储权限),
面板里显示完整路径并给一个「清空日志」按钮。
电脑端
- 虚拟屏跟着手机分辨率走:启动时读手机的物理分辨率(
wm size),从驱动模式表里挑一个
长宽比完全相同的模式撑满整块屏。驱动分辨率表从 5 条扩到 22 条
(含 3200x2136、2712x1220、1600x720 这些常见机型横屏尺寸);表里真没有就把手机分辨率写进
C:\VirtualDisplayDriver\vdd_settings.xml,下次重装驱动或重启后生效。
界面上也加了「跟随手机分辨率」勾选框。 - 认屏不再慢:上一版靠抓缩略图逐像素比对确认哪块屏是虚拟屏,但缩略图按 1 fps 抓、
还要跳过每路流必黑的第 0 帧,三次调用要等 9 秒;改成 30 fps 之后降到 1 秒。
实测
tools\exe_e2e.py 对着装好的冻结 exe 跑完整生命周期,全部通过:
- 点「开始投屏」→ 1 秒后虚拟屏出现在系统里
- 11 秒后触摸通道就绪(大头是
adb install装 APK) - 触摸注入:Windows 光标从 (1280, 800) 移到 (383, 2720),与理论值偏差 1 像素
(虚拟屏被放在主屏下方,所以是 2720 而不是 756) - 点「停止」→ 1 秒内虚拟屏从系统里消失,桌面边界回到 2560x1600
手机端实拍:画面铺满整块屏,浮窗显示 2560 × 1600 / 89.4 fps / 6.25 Mbps / 延迟 6 ms(峰值 22)/ NVENC VBR Q18 · 40Mbps。
下载
DroidExtend-Setup-1.3.0.exe—— Windows 安装程序(35 MB,内含 ffmpeg / adb / 虚拟显示驱动 / APK)DroidExtend.apk—— 手机端 App(122 KB,也可以由电脑端自动安装)
装好之后启动程序,点界面上的「安装虚拟显示器驱动(需要管理员)」,UAC 弹窗点「是」——只需要装一次。
这个项目的全部代码、文档和提交信息,都是 AI 编码代理(DeepSeek Harness / deepseek-flash)写的。
人类负责提需求、插上真机、在需要管理员权限时点「是」,以及验收。
整个过程(包括踩过的每一个坑和实测数据)记在仓库的 开发日志.md 里。