QtScrcpy 打包指南:从源码到 Windows Installer 与 macOS DMG
【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy
QtScrcpy 编译完成后,还得变成能交付用户的安装产物。本文覆盖 Windows 与 macOS 两个打包目标:前者产出绿色版目录并封装 Windows Installer,后者生成带拖拽安装界面的 macOS DMG,最后把版本号与多架构构建接入 CI。
打包前检查工具链与架构组合
两侧平台的工具链、Qt 版本和架构参数都不同。动手前对着下表核对一遍,避免编译到一半才发现ENV_QT_PATH指错了 Qt。
| 项目 | Windows | macOS |
|---|---|---|
| 构建工具 | VS 2022 + CMake(MSVC) | Xcode 命令行工具 + CMake |
Qt 路径(ENV_QT_PATH) | Qt 5msvc2019/msvc2019_64 | x64 用clang_64(Qt 5),arm64 用macos(Qt 6) |
| 环境变量 | ENV_QT_PATH、ENV_VCVARSALL(vcvarsall.bat 路径) | ENV_QT_PATH |
| 架构选项 | x86 →Win32,x64 →x64 | x86_64/arm64(CMAKE_OSX_ARCHITECTURES) |
| 额外依赖 | 无 | pip install安装 dmgbuild 等依赖 |
构建脚本见 ci/win/build_for_win.bat,参数依次为编译模式和架构。
Windows Installer 三步走
第一步:清理目录后生成工程并并行编译
脚本先删掉output与build_temp,避免旧产物污染,再生成 VS 工程并启动 8 路并行编译:
set qt_cmake_path=%ENV_QT_PATH%\msvc2019_64\lib\cmake\Qt5 REM x64 用 msvc2019_64 cmake %cmake_params% ../.. cmake --build . --config RelWithDebInfo -j8 REM 8 路并行编译产物落在output\x64\RelWithDebInfo下。
第二步:把 ADB、按键映射等运行时资源整合进发布目录
发布脚本 ci/win/publish_for_win.bat 负责复制:scrcpy-server jar、Windows 版 ADB、keymap\与config\目录,最后跑windeployqt补齐 Qt 运行时:
xcopy %adb_path% %publish_path% /Y REM 复制 ADB 工具 xcopy %keymap_path% %publish_path%keymap\ /E /Y REM 按键映射配置 windeployqt %publish_path%\QtScrcpy.exe REM 部署 Qt 依赖执行前记得先call vcvarsall.bat x64注册 MSVC 环境,否则 windeployqt 找不到运行时组件。
第三步:清理冗余 Qt 依赖,给安装包瘦身
windeployqt 是"宁多勿少"的,用不上的插件要手动删:
rmdir /s/q %publish_path%\iconengines rmdir /s/q %publish_path%\translations del %publish_path%\imageformats\qgif.dll REM 截图功能需要,保留 qjpeg.dllvc_redist.x*.exe也会被删掉,脚本改为直接从系统目录拷贝四个 vcruntime DLL。至此你得到一个绿色目录,可以交给 Inno Setup 或 NSIS 封装成 Windows Installer。
生成带拖拽引导的 DMG 界面
编译出 QtScrcpy.app
ci/mac/build_for_mac.sh 按第二个参数选 Qt:arm64 走 Qt 6,x64 走 Qt 5:
cmake -DCMAKE_PREFIX_PATH=$qt_cmake_path -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_OSX_ARCHITECTURES=arm64 ../.. # 架构参数决定产物 cmake --build . --config RelWithDebInfo -j8需要 Universal Binary 时,把-DCMAKE_OSX_ARCHITECTURES写成一个字符串里拼接多个架构即可。
用 dmgbuild 配置窗口、背景图与拖拽布局
打包入口脚本先执行pip install -r package/requirements.txt,再调用 ci/mac/package/package.py 里的dmgbuild.build_dmg。核心配置决定了你打开 DMG 后看到的一切:
info = { 'background': dmg_background_img, # 拖拽界面背景 'window': {'size': {'width': 780, 'height': 480}}, 'contents': [ {'x': 223, 'type': 'file', 'path': app_path}, # 应用本体 {'x': 550, 'type': 'link', 'path': '/Applications'}]} # 拖拽目标app 图标放在 (223, 227),Applications 快捷方式放在 (550, 227),用户一眼就会把前者拖到后者完成安装;README 放在底部作为说明。格式选 UDZO、压缩级别 9,产物体积最小。
打开产物验证安装体验
生成后双击 DMG 检查三件事:背景图与 780x480 窗口是否对齐、图标位置是否正确、拖入 /Applications 后能否正常启动。被 Gatekeeper 拦截时,右键打开或为签名身份补齐公证即可。
接入 CI 自动化发版
三个关键点,点到为止:
- 版本号:ci/generate-version.py 用
git rev-list --tags --max-count=1找到最新 tag 的 commit,再git describe --tags解析出 tag,去掉开头v后写入QtScrcpy/appversion。你只需打新 tag。 - 多架构:Windows 分别跑 x86 与 x64 脚本,macOS 分别编 arm64 与 x64。
- 产物:把
output/与 DMG 上传为 CI artifact,再挂到 Release。
并行数脚本里写死-j8,CI 机器核多时改成满核能明显缩短编译时间。
避坑速查表
| 现象 | 解法 |
|---|---|
windeployqt: command not found | 把 Qt 的bin加进 PATH:Windows 用msvc2019_64\bin,macOS 用clang_64/bin |
| windeployqt 后缺 MSVC 运行时 | 先call vcvarsall.bat注册环境,windeployqt 才会处理 vcruntime 拷贝 |
| macOS x64 编译报找不到 Qt | x64 分支固定读clang_64/lib/cmake/Qt5,确认ENV_QT_PATH指向 Qt 5 目录 |
| DMG 背景图模糊、图标错位 | 背景图按 780x480 窗口比例准备,并放在ci/mac/package/下 |
| 清理插件后截图功能失效 | imageformats\qjpeg.dll必须保留,只删真正用不到的格式插件 |
收尾
两个平台一套思路:Windows 走"清理编译 → 资源整合 → 冗余清理",macOS 走"架构选对 Qt → dmgbuild 摆好窗口"。下一步可以试试用 NSIS 或 WiX Toolset 产出正式 Windows Installer,或用 Docker 容器固化构建环境,让打包结果在任意机器上可复现。
【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考