FreeControl 用电脑控制手机 - 跨平台重写

FreeControl

这次是重写,不是升级

FreeControl 是用电脑控制 Android 设备的图形界面。投屏、触控、录屏这些活全部由 scrcpy 完成,这个程序做的是另一件事:把 scrcpy 那串又长又记不住的长选项变成能点的控件,把设备清单、连接状态和运行环境管起来。

第一代是 C# 写的 WPF 桌面程序,跑在 .NET Framework 上,只有 Windows 版。这一版换了地基:Rust + Tauri 2 做外壳,界面用 Svelte 和 Vite 写,同一套代码出 Windows、Linux、macOS 三个平台的包。因为改动到这个程度,它不是一个版本号能表达的事,所以值得单独写一篇。

跟着形式一起变的,是三件读者会直接碰到的事:

  • 平台:从仅 Windows 变成 Windows / Linux / macOS 三平台。Windows 仍按架构各出一份免安装单文件,Linux 给 AppImage 与 deb,macOS 给 dmg。
  • 产物:从单个 FreeControl.exe 变成一次发行六个包(Windows x64 / ARM64 两个 exe,Linux 的 AppImage 与 deb,macOS 的 Apple 芯片与 Intel 两份 dmg),文件名里直接带系统与架构。同时安装包体积反而小了,Windows 单文件从 7.3 MB 降到 6.1 MB。
  • 名字:v2.3.0 起程序名统一为 FreeControl,程序文件、窗口标题与文档里的写法不再有第二套;第一代同时改名为 FreeControl Legacy。数据目录没有跟着改名,仍是 FreeControl2,老配置不用搬。

早期那篇 Free Control 用电脑控制手机 - 开源 记录的就是第一代,其中的配置字段和版本说明只对 1.x 成立,换代之后已经不再适用。

设备页:设备清单与连接控制

现在能做什么

设备清单

每台设备一个别名,背后存的是它的连接标识:USB 连接的序列号,或者无线的 IP:端口。设备可以增、删、改名,在线与已连接状态实时可见——状态由 adb 服务端直接告知,连接前还会再核对一次实际是否在线,不会出现卡片显示在线、点下去却连不上的情况。

无线配对与局域网扫描

添加设备是一个弹窗,四种方式在里面切换:USB、手动填 IP:端口、局域网扫描、配对码。

Android 11 及以上在设备的「无线调试」里点「使用配对码配对设备」,程序会去找待配对的设备并把配对地址填好,输 6 位配对码就完成一次配对;此后连接端口由程序自己解析。局域网扫描则是点一下列出同网段里已开启无线调试的设备,选一个即可,扫描结果在添加时就能先起好别名。还在用 adb tcpip 5555 的老设备也能直接扫到。

参数面板

源、视频、音频、控制、录制、窗口六组常用选项都做成了控件,每一项都对应 scrcpy 的某个长选项名。每个参数后面带一个「?」,点开能看到它的作用、平台与版本限制、与其它选项的互斥关系,以及不直观取值的解释。

画面相关的选项出厂不预设,交由 scrcpy 自己决定,所以装完就能连。

参数分两层:各参数页设置的是全局参数;设备卡上的「参数」是设备参数,只对那台设备生效并优先于全局参数,可以整体启用或停用。改一台设备的参数不会把列表里其它设备推走——它是个可扩大的弹窗。

参数页:常用选项控件

连接控制

设备卡上单台连接、单台断开;也可以一次连接或断开全部。多台设备可以同时投屏,每个投屏会话的进程与输出都由程序托管,断开最后一台后主窗口会自动回到前台。

运行环境

scrcpy 与 adb 不随安装包分发,第一次启动后到「运行环境」页按需获取,下载完按官方校验值核对,不通过不写入。内置多条下载通道,直连失败会自动按序改用下一条并在进度区标明当前用的是哪条;连不上的通道在本次运行内会被跳过,也可以就地「切换通道」重下。

该页还能查看安装路径、在文件管理器里打开、检查更新,或者把目录换成你已有的那份。

运行环境:获取 scrcpy 与 adb 的入口

应用内更新

「关于」里可以检查更新,程序会下载并核对新版本后原地替换:Windows 与 Linux 的便携版自行重启完成,Linux 的安装包版本交给系统安装程序。设置页可以打开「自动检查更新」,发现新版本时只打开更新窗口,不会自己装。

日志

会话输出逐条保留,已经结束的会话同样能回看。会话输出与关键操作还会一并写进日志文件,按日期命名,保留策略可选 7 天 / 30 天 / 永久(出厂 7 天)。清空界面上的会话输出不会动磁盘记录。

设置页:外观、字体、界面语言、自动更新与日志设置

命令预览

底部实时显示将要下发的完整命令,一键复制。参数面板改了哪一项,这条命令就跟着变,想弄明白某个开关到底对应什么,看这里最直接。

外观与界面

深色、浅色、跟随系统三种主题,主题色可在预设里挑,也可以自己取色;侧栏能收成图标栏,腾出内容宽度。

设置页还能整体放大界面(100% / 115% / 130% / 150%),文字、图标、间距与控件一起变,档位随配置保存,下次启动第一帧就是这个档位。界面字体与代码字体可以分别选,缺字由对应系统的默认字体栈补齐。界面语言支持简体中文与英文,也可跟随系统,切换后不必重启。

下载与快速开始

运行要求

Windows 10 / 11(x64 与 ARM64 各一份免安装单文件),依赖系统自带的 WebView2——Windows 10 / 11 一般已预装,缺失时用微软的 Evergreen 引导程序安装。Linux 提供 AppImage 与 deb。macOS 11 及以上提供 dmg,Apple 芯片与 Intel 各一份。

另外需要一台开启了「USB 调试」的 Android 设备。

下载

从 Releases 取最新版本:

  • Windows:免安装单文件,按架构选 _windows_x64.exe 或 _windows_arm64.exe,放到任意可写目录双击即用,不产出安装器。
  • Linux:AppImage 或 deb。
  • macOS:dmg,打开后把应用拖进「应用程序」。首次打开若被 Gatekeeper 拦下,「系统设置 → 隐私与安全性」里点「仍要打开」即可。

快速开始

  1. 备好运行环境:首次启动后到「运行环境」页获取 scrcpy 与 adb。
  2. 添加设备:USB 连接填 adb devices 列出的序列号;无线连接可以选「局域网扫描」或「配对码」发现设备,也可以用手动填 IP:端口 的方式。添加时可以顺便给设备起个别名。
  3. 连接投屏:在设备卡上点「连接」。多台设备可以同时连接,底部的命令预览会显示实际下发的完整命令。
  4. 之后按需在各参数页调整全局参数,或者为某台设备单独设一套设备参数。

常见问题

设备连不上

USB:先确认设备开了「开发者选项」与「USB 调试」——找不到开发者选项时,在「设置」-「关于手机」里连点「版本号」7 次即可显示;再确认数据线完好、Windows 设备管理器里该设备没有黄色感叹号,最后看 adb devices 能不能列出它。

无线:设备与电脑要在同一局域网。用「配对码」或「局域网扫描」重新添加一次通常最快;连接端口会随设备重启或重开无线调试而变化,设备变成离线时,点该设备卡上的「重新解析端口」。

提示找不到 scrcpy 或 adb

到「运行环境」页获取,两者都不随安装包分发。也可以把该页的目录改成你已有的那份 scrcpy / adb 目录。

数据存在哪

都在应用数据根下——Windows 是 %APPDATA%/FreeControl2,Linux 是 XDG 数据根下的同名目录,macOS 是 ~/Library/Application Support/FreeControl2:

路径 用途
config.json 单一配置文件(含 schemaVersion):设备清单、全局参数、设备参数、日志保留策略
logs/yyyy-MM-dd.log 会话输出与本程序关键操作的持久化记录
scrcpy-{OS}-v{版本}/ 按需下载的 scrcpy 与 adb(未设置自定义目录时)

界面上能改的东西都落在这个 config.json 里。

怎么恢复出厂设置

删掉 config.json 再启动即可:设备清单、参数与保留策略都回到出厂默认。已下载的运行环境不受影响。

怎么更新到新版本

「关于」里点「检查更新」,或者在设置页打开「自动检查更新」。程序会下载并核对后原地替换,便携版自行重启完成。macOS 的 dmg 由 Finder 打开后覆盖旧版即可,应用不会自行退出。

退出应用后 adb 还在跑

这是有意为之:退出不会结束 adb 服务端,已经建立的无线连接随应用退出继续保留,下次启动可以直接复用。

代码仓库

捐赠

如果您觉得这个项目对您有帮助,欢迎请作者喝杯咖啡。☕

爱发电❤ https://afdian.net/a/pdone


FreeControl 用电脑控制手机 - 跨平台重写
https://awaw.cc/post/free-control-2/
作者
pdone
发布于
2026年10月29日
更新于
2026年10月29日
许可协议