barry-ran/QtScrcpy

GitHub: barry-ran/QtScrcpy

一款基于Qt的高性能跨平台Android投屏控制软件,支持自定义按键映射和多设备群控。

Stars: 28651 | Forks: 3463

# QtScrcpy ![license](https://img.shields.io/badge/license-Apache2.0-blue.svg) ![release](https://img.shields.io/github/v/release/barry-ran/QtScrcpy.svg) ![star](https://img.shields.io/github/stars/barry-ran/QtScrcpy.svg) [中文用户?点我查看中文介绍](README_zh.md) QtScrcpy 支持通过 USB 或网络显示和控制 Android 设备。它不需要 root 权限。 它支持三大平台:GNU/Linux、Windows 和 macOS。 它专注于: - **轻量**(仅显示设备屏幕) - **性能**(30~60 fps) - **质量**(1920×1080 或更高) - **低延迟**([35~70ms][lowlatency]) - **低启动时间**(显示第一帧仅需约 1 秒) - **非侵入性**(设备上不会安装任何内容) ![win](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/074a8ec0e9182259.png) ![mac](https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/screenshot/mac-en.png) ![linux](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/637db9b3b5182308.png) ## 按键映射 你可以根据需要编写脚本,将键盘和鼠标操作映射到手机的触摸和点击事件。脚本编写规则在[这里](docs/KeyMapDes.md)。 默认提供了 TikTok 和一些游戏的脚本。启用后,你可以用键盘和鼠标玩游戏。PUBG Mobile 的默认按键映射如下: ![game](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4f14643739182309.png) 添加自定义映射文件的说明。 - 编写自定义脚本并将其放入 `keymap` 目录 - 点击 `刷新脚本` 以显示它 - 选择你的脚本 - 连接手机,启动服务并点击 `应用` - 按 `~` 键(按键映射脚本中的 SwitchKey)切换到自定义映射模式 - 再次按 `~` 键切换回正常模式 - (对于 PUBG Mobile 等游戏)如果你想用 STEER_WHEEL 键移动车辆,需要将移动模式设置为 `单摇杆模式`。 ## 群控 你可以同时控制所有手机。 ![group-control-demo](https://raw.githubusercontent.com/barry-ran/QtScrcpy/dev/docs/image/group-control.gif) ## 致谢 QtScrcpy 基于 [Genymobile](https://github.com/Genymobile) 的 [scrcpy](https://github.com/Genymobile/scrcpy) 项目。非常感谢! QtScrcpy 与原始 scrcpy 的区别如下: 要点|scrcpy|QtScrcpy --|:--:|:--: ui|sdl|qt 视频编码|ffmpeg|ffmpeg 视频渲染|sdl|opengl 跨平台|自行实现|由 Qt 提供 语言|C|C++ 风格|同步|异步 按键映射|无自定义按键映射|支持自定义按键映射 构建|meson+gradle|qmake 或 CMake - 使用 Qt 定制 GUI 非常容易 - 基于 Qt 信号槽机制的异步编程提高了性能 - 易于学习 - 增加了对多点触控的支持 ## 学习 如果你感兴趣并想了解其工作原理但不知道如何入手,可以选择购买我录制的视频课程。 它详细介绍了开发架构和整个软件的开发过程,并帮助你从零开始开发 QtScrcpy。 课程介绍:[https://blog.csdn.net/rankun1/article/details/87970523](https://blog.csdn.net/rankun1/article/details/87970523) 你可以加入 QtScrcpy Telegram 群组,与志同道合的朋友交流想法: Telegram 群组:https://t.me/+EnQNmb47C_liYmRl ## 系统要求 Android API >= 21 (Android 5.0)。 确保你在设备上启用了 [ADB 调试][enable-adb]。 ## 下载 ### Windows 在 Windows 上,为简单起见,Releases 页面提供了包含所有依赖项(包括 ADB)的预构建压缩包: - [`QtScrcpy`][github-download] 或者你可以[自己构建](#Build) ### Mac OS 在 Mac OS 上,为简单起见,Releases 页面提供了包含所有依赖项(包括 ADB)的预构建压缩包: - [`QtScrcpy`][github-download] 或者你可以[自己构建](#Build) ### Linux 对于 Arch Linux 用户,可以使用 AUR 安装:`yay -Syu qtscrcpy`(可能不是最新版本;维护者:[yochananmarqos](https://aur.archlinux.org/account/yochananmarqos)) 对于其他发行版的用户,可以使用 Releases 页面的预构建压缩包: - [`QtScrcpy`][github-download] 或者你可以在 `dev` 分支的 [GitHub Actions](https://github.com/barry-ran/QtScrcpy/actions/workflows/ubuntu.yml) 中下载最新的构建产物。 或者你可以[自己构建](#Build)(不推荐,如果可以请从 Actions 获取) ## 运行 在电脑上连接 Android 设备,然后运行程序并点击 `USB 连接` 或 `WiFi 连接` ### 无线连接步骤(确保手机和 PC 在同一局域网内): 1. 在 Android 设备的开发者选项中启用 USB 调试 2. 通过 USB 将 Android 设备连接到电脑 3. 点击更新设备,你会看到设备编号已更新 4. 点击获取设备 IP 5. 点击启动 adbd 6. 点击无线连接 7. 再次点击更新设备,将发现另一个带有 IP 地址的设备。选择此设备。 8. 点击启动服务 注意:启动 adbd 后,无需保持 Android 设备通过 USB 连接。 ## 界面按钮介绍: - 启动配置:启动服务前的功能参数设置 你可以设置本地录制视频的比特率、分辨率、录制格式和视频保存路径。 - 后台录制:启动服务后不显示 Android 设备屏幕。在后台进行录制。 - 置顶:Android 设备的视频窗口将保持在最前 - 关闭屏幕:启动服务后自动关闭 Android 设备屏幕以节省电量 - 反向连接:服务启动模式。如果遇到连接失败并提示 `more than one device`,可以取消勾选此项 - 刷新设备:刷新当前连接的设备 - 启动服务:连接到 Android 设备 - 停止服务:断开与 Android 设备的连接 - 停止所有服务:断开所有已连接的 Android 设备 - 获取设备 IP:获取 Android 设备的 IP 地址并更新到“无线”区域,以便于设置无线连接。 - 启动 adbd:启动 Android 设备的 adbd 服务。在无线连接之前必须启动它。 - 无线连接:无线连接到 Android 设备 - 无线断开:断开无线连接的 Android 设备 - adb 命令:执行自定义 ADB 命令(目前不支持阻塞命令,如 shell) ## 主要功能 - 实时显示 Android 设备屏幕 - 实时鼠标和键盘控制 Android 设备 - 屏幕录制 - 截图为 png - 无线连接 - 支持多设备连接 - 全屏显示 - 置顶显示 - 安装 apk:将 apk 拖放到视频窗口进行安装 - 传输文件:将文件拖放到视频窗口以将文件发送到 Android 设备 - 后台录制:仅录制,无显示界面 - 复制粘贴 可以在电脑和设备之间双向同步剪贴板: - `Ctrl + c` 将设备剪贴板复制到电脑剪贴板; - `Ctrl + Shift + v` 将电脑剪贴板复制到设备剪贴板; - `Ctrl + v` 将电脑剪贴板作为文本事件序列粘贴(尚不支持非 ASCII 字符)。 - 群控 - 将设备扬声器声音同步到电脑(基于 [sndcpy](https://github.com/rom1v/sndcpy),仅限 Android 10+) ## 快捷键 | 操作 | 快捷键 (Windows) | 快捷键 (macOS) | -------------------------------------- |:----------------------------- |:----------------------------- | 切换全屏模式 | `Ctrl`+`f` | `Cmd`+`f` | 调整窗口大小为 1:1 (像素完美) | `Ctrl`+`g` | `Cmd`+`g` | 调整窗口大小以去除黑边 | `Ctrl`+`w` \| _双击¹_ | `Cmd`+`w` \| _双击¹_ | 点击 `HOME` | `Ctrl`+`h` \| _中键点击_ | `Ctrl`+`h` \| _中键点击_ | 点击 `BACK` | `Ctrl`+`b` \| _右键点击²_ | `Cmd`+`b` \| _右键点击²_ | 点击 `APP_SWITCH` | `Ctrl`+`s` | `Cmd`+`s` | 点击 `MENU` | `Ctrl`+`m` | `Ctrl`+`m` | 点击 `VOLUME_UP` | `Ctrl`+`↑` _(上)_ | `Cmd`+`↑` _(上)_ | 点击 `VOLUME_DOWN` | `Ctrl`+`↓` _(下)_ | `Cmd`+`↓` _(下)_ | 点击 `POWER` | `Ctrl`+`p` | `Cmd`+`p` | 开启电源 | _右键点击²_ | _右键点击²_ | 关闭设备屏幕 (保持镜像)| `Ctrl`+`o` | `Cmd`+`o` | 展开通知面板 | `Ctrl`+`n` | `Cmd`+`n` | 收起通知面板 | `Ctrl`+`Shift`+`n` | `Cmd`+`Shift`+`n` | 复制到剪贴板³ | `Ctrl`+`c` | `Cmd`+`c` | 剪切到剪贴板³ | `Ctrl`+`x` | `Cmd`+`x` | 同步剪贴板并粘贴³ | `Ctrl`+`v` | `Cmd`+`v` | 注入电脑剪贴板文本 | `Ctrl`+`Shift`+`v` | `Cmd`+`Shift`+`v` _¹双击黑边将其移除。_ _²右键点击在屏幕关闭时开启屏幕,否则按下 BACK。_ _³仅限 Android >= 7。_ ## 待办事项 [TODO](docs/TODO.md) ## 常见问题 [FAQ](docs/FAQ.md) ## 开发 [DEVELOP](docs/DEVELOP.md) 欢迎大家维护这个项目并贡献代码,但请遵循以下要求: 1. 请向 dev 分支而不是 master 分支提交 PR 2. 在提交 PR 之前请 rebase 原始项目 3. 请遵循“少量多次”的原则提交 PR(建议一个更改对应一个 PR) 4. 请保持代码风格与现有风格一致。 ## 为什么要开发 QtScrcpy? 根据重要性(从高到低)列出了以下几个原因。 1. 在学习 Qt 的过程中,我需要一个真正的项目来尝试。 2. 我有一些音视频背景技能,并且对它们感兴趣。 3. 我有一些 Android 开发技能。但我已经很久没用了。我想巩固一下。 4. 我发现了 scrcpy 并决定用新技术栈(C++ + Qt + Opengl + FFmpeg)重新制作它。 ## 构建 所有依赖项都已提供,编译很容易。 ### QtScrcpy #### 非 Arch Linux 用户 1. 在目标平台上使用官方 Qt 安装程序或第三方工具(如 [aqt]( #### 组织 用你的组织支持这个项目。你的 logo 将显示在这里并链接到你的网站。[[资助](https://opencollective.com/QtScrcpy/contribute)]
标签:Android投屏, FPS游戏映射, Linux软件, macOS软件, MDM, Qt开发, Scrcpy客户端, TikTok脚本, USB调试, Windows软件, 低延迟, 多设备控制, 实时显示, 录屏, 手机控制, 无线投屏, 桌面控制软件, 游戏辅助, 移动设备管理, 群控系统, 计算机控制, 输入模拟, 键鼠映射