☰
QtScrcpy 打包指南:从源码到 Windows Installer 与 macOS DMG
2026/9/29 2:46:04 网站建设 项目流程

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。

项目WindowsmacOS
构建工具VS 2022 + CMake(MSVC)Xcode 命令行工具 + CMake
Qt 路径(ENV_QT_PATH)Qt 5msvc2019/msvc2019_64x64 用clang_64(Qt 5),arm64 用macos(Qt 6)
环境变量ENV_QT_PATH、ENV_VCVARSALL(vcvarsall.bat 路径)ENV_QT_PATH
架构选项x86 →Win32,x64 →x64x86_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.dll

vc_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 编译报找不到 Qtx64 分支固定读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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询