ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

QtScrcpy安装包打包实战:Windows、macOS、Linux 三平台一篇搞定

QtScrcpy安装包打包实战:Windows、macOS、Linux 三平台一篇搞定 QtScrcpy安装包打包实战Windows、macOS、Linux 三平台一篇搞定【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpyQtScrcpy 是一个用 Qt 写成的 Android 投屏与操控工具手机画面实时镜像到桌面窗口触控和按键可以反向注入设备。这个项目的安装包打包流程已经完全脚本化Windows 出绿色版目录macOS 出拖拽式 DMGLinux 出 AppImage全部沉淀在ci/目录里。读懂这套跨平台安装包的流水线比你自己从头造轮子省事得多。先看清三平台的打包链路三个平台的产物形态和工具链完全不同但入口统一CMake 加一个ENV_QT_PATH环境变量。平台构建脚本打包脚本最终产物关键工具Windowsci/win/build_for_win.batci/win/publish_for_win.bat绿色版目录windeployqtmacOSci/mac/build_for_mac.shci/mac/package_for_mac.shQtScrcpy.dmgdmgbuildLinuxci/linux/build_for_linux.shci/linux/package_appimage.shQtScrcpy-x86_64.AppImagelinuxdeploy三套脚本都接收同样的两个位置参数构建模式Debug / Release / MinSizeRel / RelWithDebInfo 四选一和 CPU 架构。参数不在白名单里会直接报错退出而不是悄悄套用默认值——这个设计避免了打出错平台的包。准备环境一个变量加干净目录三个平台的脚本只认一个环境变量ENV_QT_PATH它要指向 Qt 的具体版本目录比如 5.12.5 那一层而不是 Qt 安装器的根目录路径差一层后面全错。Windows 脚本会按架构自动拼接 CMake 包路径并生成解决方案set qt_cmake_path%ENV_QT_PATH%\msvc2019_64\lib\cmake\Qt5 cmake %cmake_params% ../..x86 走msvc2019目录x64 走msvc2019_64选错架构的话后面 windeployqt 部署出来的运行时就对不上。macOS 这边有个容易忽略的细节arm64 和 x64 指向的是两个不同的 Qt 版本目录。arm64 指向 Qt6 的macos目录x64 指向 Qt5 的clang_64目录ci/mac/build_for_mac.sh 里是分开维护的混用会直接报 CMake 路径错误。编译前的第一件事是清场三套脚本都会先删掉output和构建临时目录再重新创建防止上一次的残留产物混进新包。手动调试时建议照做清不干净目录打包问题会非常难排查。Windows 端三步走通 QtScrcpy 安装包打包Windows 这条线拆成两个脚本build 只管编译publish 负责把运行依赖凑齐改依赖清单时不用重新编译。一条命令完成编译调用方式是build_for_win.bat Release x64内部先用 Visual Studio 17 2022 生成器配置 CMake再并行编译cmake --build . --config %build_mode% -j8-j8控制并行度CI 机器上可以直接按核心数拉满编译产物按架构分子目录落在output下。发布阶段把运行依赖凑齐ci/win/publish_for_win.bat 做的事可以一句话概括把能独立运行的最小集合复制进一个新目录。名单包括编译出的QtScrcpy.exe、内置的 ADB 工具、scrcpy-server 的 jar 包、keymap按键映射目录和config配置目录最后让 windeployqt 按 exe 的依赖关系自动补齐 Qt 的 DLL 与插件。windeployqt 之前脚本会先调用 vcvarsall 注册 MSVC 环境这一步卡住的人最多不注册的话VC 运行时相关的依赖不会被带进发布目录。裁剪依赖删插件、换运行时windeployqt 的策略是宁多勿缺出来的目录带着一堆用不上的文件脚本随后做三轮裁剪删掉iconengines和translations两个目录应用没用图标引擎翻译文件也一并清理图片格式插件只保留qjpeg截图功能依赖它和qsvgqgif、qico、qwebp等其余的全删删掉 windeployqt 复制来的vc_redist安装包改为直接从系统目录拷贝msvcp140、vcruntime140等运行时 DLL 进发布目录。第三点是个体积和体验的权衡带vc_redist.exe的话用户首次运行还得装一次运行库直接塞 DLL 更省事。裁剪完这个目录就是一份可分发的绿色版再拿 Inno Setup 这类打包器做成 Windows Installer 即可。macOS 端把 QtScrcpy 安装包打包成 DMGmacOS 用户期待的安装体验是双击 DMG、拖进 Applicationsdmgbuild 这个 Python 库就是干这个的——用配置描述窗口尺寸、背景图和图标坐标然后自动生成符合这套交互习惯的镜像。先装好打包依赖ci/mac/package_for_mac.sh 开头先安装 Python 依赖版本钉死避免行为漂移pip install -r ci/mac/package/requirements.txtrequirements.txt 里只有一个包dmgbuild1.4.2装完就进入打包环节由 package.py 接手。读懂 package.py 的布局逻辑package.py 干两件事先生成一份 dmg-settings.json 描述文件布局再调用dmgbuild.build_dmg()产出镜像成功标志是build/目录下出现QtScrcpy.dmg。布局里值得记住的参数参数取值作用format / compression-levelUDZO / 9zlib 最高压缩级别镜像更小、打包更慢window.size780 × 480打开 DMG 后的窗口大小contents 第 1 项QtScrcpy.app坐标 (223, 227)左侧的应用图标contents 第 2 项/Applications 链接坐标 (550, 227)右侧的拖拽目标contents 第 3 项README_MACOS.md坐标 (390, 400)底部的安装说明坐标和背景图是配套的dmg-background.jpg 上画好的图标占位必须和 contents 坐标对齐否则视觉上就是歪的。另外注意应用路径指向build/QtScrcpy.app打 DMG 之前必须先有构建产物——macOS 上 CMake 构建直接产出.app包而不是散文件。Linux 端用 linuxdeploy 一步出 AppImageLinux 这条线最省事ci/linux/package_appimage.sh 按 FHS 目录规范把可执行文件、ADB、scrcpy-server、keymap 和 config 摆进 AppDir生成桌面项与 appdata 元数据然后调用 linuxdeploy 的 qt 插件部署linuxdeploy --appdir QtScrcpy.AppDir --plugin qt --output appimage脚本还专门处理了 CI 环境检测到 Docker 或 CI 标记时会预先拷贝 Qt 平台插件并调整LD_LIBRARY_PATH保证无头环境也能打包成功。最终产物落在output/appimage/下文件名带x86_64架构后缀。自动生成版本号打 tag 就够发版最容易漏的就是版本号。ci/generate-version.py 的做法是用git describe --tags取最近的 tag比如v1.2.0去掉开头的v写进QtScrcpy/appversion文件构建时直接读取。也就是说打一个 tag跑一次脚本版本号就全自动了。CI 流水线把它放在构建步骤之前产物的文件名和标题会跟着 tag 走不会再出现tag 是 1.2.0、包里还是 1.1.9的尴尬。踩坑速查 ⚠️症状大概率原因处理办法windeployqt: command not foundQt 的bin目录不在 PATHmacOS 下export PATH$ENV_QT_PATH/clang_64/bin:$PATHWindows 下确认对应架构的bin已入 PATHDMG 里图标位置歪、背景穿帮背景图占位与 contents 坐标没对齐按 780 × 480 窗口尺寸绘制背景改布局后同步改坐标包里混着旧 DLLoutput目录没清干净重跑脚本即可脚本自带清场手动编译先删output编译慢并行度没调Linux/macOS 把-j8换成-j$(nproc)macOS 构建报 CMake 路径错误arm64 / x64 的 Qt 目录用混arm64 用 Qt6 的macos目录x64 用 Qt5 的clang_64目录发布前三件事收尾 拿到绿色版、DMG 和 AppImage 之后离用户点开就能用还差三件事都在仓库之外做在本地准备一份 Inno Setup 脚本把 Windows 绿色版封装成带卸载器的 Installer用户安装体验会更完整把你自己的 CI 搭成矩阵任务打 tag 触发三平台并行打包产物自动归档省掉手工搬运在干净虚拟机或新系统上各跑一遍重点验证 VC 运行时和 ADB 是否真的自包含——这一步没做过的包到了用户手里必炸。【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表