QtScrcpy持续集成配置:GitHub Actions自动化构建流程
你是否还在为跨平台构建Android投屏工具QtScrcpy而烦恼?手动编译Windows、macOS和Linux版本不仅耗时,还容易因环境差异导致构建失败。本文将详解如何通过GitHub Actions实现QtScrcpy的全平台自动化构建,只需一次配置,即可自动生成可分发的应用程序包。读完本文,你将掌握多平台CI/CD流程设计、环境变量管理和构建脚本优化技巧。
持续集成架构概览
QtScrcpy的CI流程基于ci/目录下的自动化脚本实现跨平台构建,支持Windows(x86/x64)、macOS(Intel/Apple Silicon)和Linux三大桌面平台。核心工作流包含版本号生成、环境检查、CMake构建和产物打包四个阶段,各平台构建脚本遵循统一接口规范,确保构建过程一致性。
项目CI目录结构如下:
ci/
├── generate-version.py # 版本号自动生成
├── linux/
│ └── build_for_linux.sh # Linux构建脚本
├── mac/
│ ├── build_for_mac.sh # macOS构建脚本
│ └── package_for_mac.sh # DMG打包脚本
└── win/
└── build_for_win.bat # Windows构建脚本
版本号自动管理
版本号生成是CI流程的第一个环节,由ci/generate-version.py脚本实现。该脚本通过解析Git标签自动生成符合语义化版本规范的版本号,并写入QtScrcpy/appversion文件供构建过程使用。
核心实现逻辑:
# 获取最新标签对应的提交记录
p = os.popen('git rev-list --tags --max-count=1')
commit = p.read().strip()
# 解析标签生成版本号
p = os.popen(f'git describe --tags {commit}')
tag = p.read().strip() # 例如 v1.2.3
version = tag[1:] # 移除前缀 'v',得到 1.2.3
# 写入版本文件
version_file = os.path.abspath('../QtScrcpy/appversion')
with open(version_file, 'w') as f:
f.write(version)
Linux平台构建流程
Linux构建脚本ci/linux/build_for_linux.sh采用CMake+GCC工具链,支持Debug/Release等四种构建模式,自动处理Qt环境依赖和输出目录清理。
关键步骤解析
-
环境变量配置:通过
ENV_QT_PATH指定Qt安装路径,构建脚本会自动拼接CMake模块路径:qt_cmake_path=$ENV_QT_PATH/gcc_64/lib/cmake/Qt5 export PATH=$qt_gcc_path/bin:$PATH -
构建参数验证:严格检查输入的构建模式是否合法,避免无效构建:
if [[ $build_mode != "Release" && $build_mode != "Debug" && $build_mode != "MinSizeRel" && $build_mode != "RelWithDebInfo" ]]; then echo "error: unknown build mode, exiting......" exit 1 fi -
CMake构建流程:清理历史构建产物后执行标准CMake构建:
# 清理输出目录 output_path=./output if [ -d "$output_path" ]; then rm -rf $output_path fi # 执行构建 cmake_params="-DCMAKE_PREFIX_PATH=$qt_cmake_path -DCMAKE_BUILD_TYPE=$build_mode" cmake $cmake_params . cmake --build . --config "$build_mode" -j8
Windows平台构建配置
Windows平台构建通过ci/win/build_for_win.bat实现,使用Visual Studio 2019编译器和Qt MSVC工具链,支持x86和x64两种架构。
架构选择与Qt路径配置
脚本通过命令行参数区分CPU架构,自动选择对应Qt库路径:
if /i "%2"=="x86" (
set cpu_mode=x86
set qt_cmake_path=%ENV_QT_PATH%\msvc2019\lib\cmake\Qt5
)
if /i "%2"=="x64" (
set cpu_mode=x64
set qt_cmake_path=%ENV_QT_PATH%\msvc2019_64\lib\cmake\Qt5
)
Visual Studio项目生成
Windows构建使用VS生成器创建解决方案文件,确保与Windows SDK的兼容性:
set cmake_params=-DCMAKE_PREFIX_PATH=%qt_cmake_path% -DCMAKE_BUILD_TYPE=%build_mode% -G "Visual Studio 16 2019" -A %cmake_vs_build_mode%
cmake %cmake_params% ../..
cmake --build . --config %build_mode% -j8
macOS通用二进制构建
macOS构建脚本ci/mac/build_for_mac.sh支持生成同时兼容Intel(x64)和Apple Silicon(arm64)的通用二进制,通过CMAKE_OSX_ARCHITECTURES参数实现架构控制。
跨架构构建配置
# 根据CPU架构选择Qt库路径
if [ $cpu_arch == "x64" ]; then
qt_cmake_path=$ENV_QT_PATH/clang_64/lib/cmake/Qt5
cmake_arch=x86_64
else
qt_cmake_path=$ENV_QT_PATH/macos/lib/cmake/Qt6
cmake_arch=arm64
fi
# 添加架构参数
cmake_params="-DCMAKE_PREFIX_PATH=$qt_cmake_path -DCMAKE_BUILD_TYPE=$build_mode -DCMAKE_OSX_ARCHITECTURES=$cmake_arch"
构建完成后,可通过lipo命令验证二进制架构信息:
lipo -info output/QtScrcpy.app/Contents/MacOS/QtScrcpy
GitHub Actions工作流配置
将以下内容保存为.github/workflows/build.yml,即可启用GitHub Actions自动化构建。该工作流在每次推送到main分支或创建标签时触发,自动完成全平台构建并上传产物。
name: QtScrcpy CI
on:
push:
branches: [ main ]
tags: [ 'v*' ]
pull_request:
branches: [ main ]
jobs:
build-windows:
runs-on: windows-2019
steps:
- uses: actions/checkout@v4
- name: Set up Qt
uses: jurplel/install-qt-action@v3
with:
version: '5.15.2'
arch: win64_msvc2019_64
- name: Build
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
cd ci/win
build_for_win.bat Release x64
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: windows-build
path: output/
# macOS和Linux构建作业配置类似,省略...
构建结果验证
构建完成后,各平台产物会自动输出到output/目录。Windows平台生成可执行安装程序,macOS平台生成DMG镜像,Linux平台生成AppImage格式的可执行文件。可通过以下方式验证构建质量:
- 功能测试:运行产物验证Android设备投屏和控制功能
- 版本信息:检查应用关于对话框中的版本号是否正确
- 架构兼容性:在不同CPU架构的设备上测试通用二进制
常见问题排查
构建失败处理
- Qt环境问题:确保
ENV_QT_PATH指向正确的Qt安装目录,可通过echo $ENV_QT_PATH调试路径 - 依赖缺失:Linux平台需安装
libx11-dev、libgl1-mesa-dev等系统依赖 - 权限问题:macOS构建需确保
ci/mac/package_for_mac.sh具有可执行权限:chmod +x ci/mac/*.sh
构建优化建议
- 缓存Qt依赖:在GitHub Actions中使用
actions/cache缓存Qt安装目录 - 并行构建:通过
-j$(nproc)参数充分利用CI服务器CPU核心 - 增量构建:保留
build_temp/目录实现增量编译,缩短构建时间
总结与展望
通过本文介绍的CI配置,QtScrcpy实现了"代码提交即构建完成"的自动化流程,将开发者从繁琐的跨平台构建工作中解放出来。未来计划添加自动化测试环节,通过docs/目录下的测试用例实现构建质量的自动验证。
如果你觉得本文有帮助,请点赞收藏并关注项目更新。下一期我们将介绍如何为QtScrcpy添加自定义快捷键功能,敬请期待!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




