
项目背景
在移动应用开发和测试过程中,我们经常需要同时管理和控制多台 Android 设备。传统的方式是逐个设备操作,效率低下且容易出错。Phone Control 应运而生,它是一款基于 Tauri 2 框架开发的跨平台桌面应用,专为解决多设备管理难题而设计。
核心特性
1. 多服务器架构
Phone Control 支持同时连接多个 ADB 服务器,无论是本地设备还是远程设备,都能统一管理。你可以:
- 添加任意数量的 ADB 服务器
- 灵活启用或禁用服务器
- 配置自动持久化,重启应用后无需重新配置
这种设计特别适合需要管理分布在不同网络环境中的设备场景。
2. 实时投屏预览
应用采用高效的截屏机制,在 Rust 后端完成图像处理:
- PNG 解码后缩小至 360px 宽度
- 重新编码为 JPEG 格式(约 30-60KB)
- 可调节刷新帧率(1-10 FPS)
- 自动管理当前页设备的预览任务
这种优化策略既保证了预览的流畅性,又避免了 WebView 内存溢出问题。
3. 智能设备管理
应用提供了双重设备管理界面:
左侧设备列表:
- 紧凑的列表视图,一目了然
- 点击状态点快速禁用/启用设备
- 实时搜索过滤
- 一键刷新设备状态
右侧设备卡片:
- 大屏幕投屏预览
- 直接点击和滑动操作
- 设备 ID 一键复制
- 独立的禁用控制
禁用的设备会从投屏列表中移除,但仍保留在左侧列表中,方便随时重新启用。
4. 批量操作能力
这是 Phone Control 最强大的功能之一。选中多台设备后,你可以:
- 批量点击:在投屏画面上点击,所有选中设备同步执行
- 批量滑动:滑动操作自动按各设备分辨率缩放
- 批量输入:一次输入文本,所有设备同步接收
- 批量命令:执行 ADB Shell 命令,逐设备显示结果
坐标缩放算法在 Rust 后端自动计算,确保不同分辨率设备都能准确响应操作。
5. scrcpy 深度集成
对于需要高质量投屏的场景,应用集成了 scrcpy:
- 一键启动独立投屏窗口
- 支持远程 ADB 服务器
- 保持低延迟和高画质
6. 性能优化
为了支持大规模设备管理,应用做了多项优化:
- 精简设备信息获取:列表刷新时只获取设备序列号和状态,不再获取电量等信息
- 分页显示:默认每页 14 台设备,可自定义(6-24 台)
- 异步架构:所有 ADB 操作在 Tokio 异步运行时中执行
- 自动刷新:应用启动和服务器状态变更时智能刷新
技术架构
前端技术栈
- React 19:最新的 React 版本,提供更好的性能
- TypeScript:类型安全,减少运行时错误
- Zustand:轻量级状态管理,简单高效
- CSS Modules:样式隔离,避免冲突
- Vite:快速的构建工具
后端技术栈
- Rust:内存安全,高性能
- Tauri 2:轻量级桌面应用框架
- Tokio:异步运行时,支持高并发
- Image:图像处理库,用于截屏优化
通信机制
- Commands:前端调用后端功能
- Events:后端主动推送数据到前端
- 异步任务:后台轮询和截屏完全独立运行
使用场景
1. 应用测试
- 同时在多台设备上测试应用兼容性
- 批量执行测试操作,提高测试效率
- 实时观察不同设备的表现
2. 自动化演示
- 多设备同步演示应用功能
- 展会或发布会上的多屏展示
- 培训场景下的统一操作
3. 设备管理
- 批量安装/卸载应用
- 统一配置设备参数
- 远程设备监控和维护
快速开始
bash
# 克隆项目
git clone https://github.com/0pen1/phone-control.git
# 安装依赖
cd phone-control
npm install
# 开发模式
npm run tauri dev
# 构建应用
npm run tauri build
构建完成后,在 src-tauri/target/release/bundle/ 目录下可以找到打包好的应用。
未来规划
- 支持 iOS 设备管理
- 添加设备录屏功能
- 支持自定义脚本执行
- 云端设备管理
- 更多批量操作命令
总结
Phone Control 是一款专为多设备管理场景设计的工具,它结合了现代 Web 技术和 Rust 的高性能,提供了流畅的用户体验。无论你是应用开发者、测试工程师,还是需要管理大量 Android 设备的运维人员,Phone Control 都能显著提升你的工作效率。
项目完全开源,欢迎贡献代码和提出建议!