Skip to content

DroidExtend 1.3.0

Choose a tag to compare

@Blank2007 Blank2007 released this 11 Oct 06:29
· 22 commits to main since this release

用一根 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 里。