PakePlus 中文文档 下载 App

同时编译多平台——一次发布怎么产出五份安装包

"一键出多平台"是什么意思

PakePlus 的云端打包模式有一个核心卖点:一次发布,GitHub Actions 自动并行编译所有平台,等 3-10 分钟后去 Release 页面一次性拿齐所有安装包。

不需要在 Windows 上打一份、macOS 上再打一份、Linux 上再打一份——全部由 GitHub 云端 Runner 并行跑完。

并行编译的技术原理

GitHub Actions Matrix Strategy

GitHub Actions 的 strategy.matrix 功能允许在一个 workflow 里定义多个并行任务:

# 伪代码:PakePlus 模板里可能的结构
strategy:
  matrix:
    os: [windows-latest, macos-latest, macos-13, ubuntu-latest, ubuntu-22.04-arm]
    include:
      - os: windows-latest
        runner: self-hosted-x64
      # ... 更多配置

每个 os 值对应一个独立的 GitHub Runner,它们同时启动、同时编译、互不干扰。

Runner 的选择

平台GitHub Runner说明
Windows x64windows-latestWindows Server 2022,x64 架构
Windows ARM64自托管或第三方GitHub 官方不提供 ARM64 Windows Runner
macOS Apple Siliconmacos-latestM1/M2/M3 架构
macOS Intelmacos-13最后一个 Intel macOS Runner(High Sierra)
Linux x64ubuntu-latestUbuntu 22.04 x64
Linux ARM64ubuntu-22.04-armUbuntu ARM64 模拟 Runner
AndroidLinux Runner + Android NDK在 Linux 上编译 APK
iOSmacos-latest用 Xcode 编译 IPA

并行 vs 串行

假设一次发布要编译 6 个目标:

方式每个目标耗时总耗时
串行3 分钟18 分钟
并行3 分钟3 分钟(取最慢那个)

并行编译把"线性累加"变成"取最大值"——目标数量越多,优势越明显。

产物命名规则

GitHub Release 页面会自动为每个产物生成文件名,通常遵循:

{软件名}_{版本号}_{平台}_{架构}.{扩展名}

示例:

PakePlusDemo_1.0.0_x64-setup.exe      ← Windows 安装版
PakePlusDemo_1.0.0_win-x64.zip       ← Windows 绿色版
PakePlusDemo_1.0.0_aarch64.dmg       ← macOS Apple Silicon
PakePlusDemo_1.0.0_x86_64.dmg        ← macOS Intel
PakePlusDemo_1.0.0_amd64.deb         ← Linux deb
PakePlusDemo_1.0.0_amd64.AppImage    ← Linux AppImage
PakePlusDemo_1.0.0_arm64.deb         ← Linux ARM64
PakePlusDemo_1.0.0.apk               ← Android APK
PakePlusDemo_1.0.0.ipa               ← iOS IPA

文件名由 PakePlus 模板的 workflow 自动生成,用户不需要手动命名。

macOS 通用二进制

macOS 同时编译 Apple Silicon 和 Intel 后,会自动合成一个 Universal Binary(通用二进制)——用户下载一个 .dmg,在 M 系列 Mac 和 Intel Mac 上都能原生运行,不需要 Rosetta 转译。

这是 GitHub Actions Runner 的优势:一次发布同时出两种架构的包,PakePlus 模板自动做合成。

移动端打包的额外注意

移动端(Android / iOS)打包有额外的注意事项:

Android

iOS

同时编译的资源消耗

同时编译多个平台时,GitHub Actions 的使用量会快速累积:

平台组合一次发布消耗的分钟数
仅桌面三平台(Win+Mac+Linux)约 15 分钟
桌面 + Android约 20 分钟
全平台(桌面 + Android + iOS)约 30 分钟
每月免费额度2000 分钟
每月约可发布60-130 次

超出免费额度需要升级 GitHub Pro($4/月,5000 分钟/月)或 Team($4/人/月,额外额度)。

部分失败的处理

并行编译时,可能某个平台成功了、另一个失败了:

本地为什么做不到

本地无法同时编译多平台,根本原因有两个:

  1. 平台限制:macOS 上可以编 Windows(需要交叉编译环境),但 Windows 上不能编 macOS(Apple 的 EULA 限制),任何系统上都不能编 iOS(必须 Xcode)
  2. 依赖复杂:每增加一个编译目标就要下载安装一套编译工具链,本地硬盘很快被撑爆

GitHub Actions 云端天然绕过了这两个问题——五个操作系统各有一个 Runner,各自装各自的依赖,互不干扰。