WSABuilds GitHub Actions实战:一条流水线如何自动产出全套WSA定制包
2026/9/9 17:48:03 网站建设 项目流程

WSABuilds GitHub Actions实战:一条流水线如何自动产出全套WSA定制包

【免费下载链接】WSABuildsRun Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solutions) built in.项目地址: https://gitcode.com/GitHub_Trending/ws/WSABuilds

WSABuilds 是一个把 Windows 安卓子系统(WSA)做成「带 Root、带谷歌框架的成品安装包」的项目。它用 GitHub Actions 持续集成把「WSA 一更新,全套包就自动重打」这件事彻底自动化——读完这篇,你会明白它怎么编排工作流,以及哪些套路能直接搬到你自己的仓库里。

🧩 手工打包一次 WSA,要忙多久

想象一下维护者的日常:微软推了一次 WSA 更新,你手里同时压着好几件事——

  • 架构分 x64 和 arm64 两条线,老机型用的旧版 WSA 还得再单独打一套;
  • Root 方案有 8 种可选:无 Root、KernelSU、Magisk 的 Stable / Canary / Beta / Debug / Alpha / Delta;
  • 谷歌框架可选 MindTheGapps 或干脆不装,Amazon 商店可以留也可以删;
  • 设备伪装名单从 Pixel 4a 一直到 Pixel Fold,共 13 个机型代号。

光是「Windows 11 x64 + Magisk + GApps + 去掉 Amazon + 伪装成 Pixel 5」这类组合,官方一轮更新就要并行产出一二十个变体。再叠加人工去 README 里改下载徽章链接、人工建 Release 标签、人工核对 Magisk 和 KernelSU 的版本号——一次更新下来,纯手工操作要忙上大半天,还容易漏。

🏭 一条流水线走完 5 步,成品包自动落地

整个自动化的入口是一个名为「Check update」的工作流(.github/workflows/ 目录下的 update.yml)。触发时人只需要交三样东西:WSA 版本号、更新说明、渠道类型(Insider 预览版还是零售版)。之后流水线自己走完五步:

  1. 查版本:四个独立 Python 脚本(放在 MagiskOnWSA/Update Check/)分别去探 Magisk Stable、Magisk Canary、KernelSU、MindTheGapps 的最新版本,结果写进环境变量往下传;
  2. 改链接:脚本自动把 README 下载表里的六个徽章链接换成新版本对应的 Release 地址,有改动就自动提交;
  3. 立标签:先检查Windows_11_x.x.x这类 tag 是否已存在,没有才创建对应 Release,Release 说明文件里的占位符(日期、各组件版本)被批量替换成真实值;
  4. 下订单:同一份 yaml 里排了二十多个构建任务,每个任务调用一个可复用的「预制」构建工作流,只传一组参数;
  5. 跑构建:每个任务内部依次是装依赖 → 跑MagiskOnWSA/scripts/里的 build.sh 拉组件、打镜像 → 注入 Houdini 转译器 → 7z 高压缩打包 → Windows 10 兼容补丁 → 上传到对应 Release。

订单长这样,一眼能看懂每个包是什么配置:

uses: ./.github/workflows/build.yml with: arch: x64 root: magisk gapps: --install-gapps devicemodel: redfin

redfin是 Pixel 5 的代号,传进去装出来的包里,安卓系统就认为自己在 Pixel 5 上跑——这就是「设备伪装」选项的落点。

🎯 四个值得偷师的设计

1. 可复用工作流 = 预制菜套餐,传参就是点菜。build.yml 自己不能跑,它声明为workflow_call只接受调用。所有变体的差异全部压缩成arch / root / gapps / devicemodel / compressformat这几个参数。好处是新增一个组合(比如以后加 Pixel 8)时,只需再写十行「点菜」配置,构建逻辑一行不用动。你做多平台、多配置的发布项目(比如同一个应用出 iOS / Android / 桌面版),这个结构直接可用。

2. 触发、点单、做菜分成三层。「Check update」负责人工入口和 Release 管理,可复用工作流负责做菜,中间还有个 buildtester.yml 专门让人在 Actions 页面上「自选菜单」试做。三层分开之后,正式流水线保持干净,测试和正式发布互不干扰。

3. 缓存用在对的地方。Python 依赖走 pip 缓存并锁定 requirements.txt 所在目录,Ubuntu 系统包(e2fsprogs、attr、qemu-utils 这些打镜像必需的工具)用专门的 apt 缓存 Action 缓存。这两处省掉的正是每次运行都要重跑的最慢环节。

4. 用needs把「版本没查对就不许打包」变成硬约束。所有构建任务都needs前面的 check 和建标签任务,意味着组件版本没拿到、tag 已存在这种异常会在构建之前就被拦下,而不是打出一堆废包再人工清理。依赖关系即顺序控制,这是并行任务里防止「脏构建」的便宜办法。

🛠️ 自己动手:手动触发一次自定义构建

想看流水线怎么跑,不用等官方发版。在仓库 Actions 标签页找到「Custom Build (for testing purpose)」,Run workflow 会弹出一张表单:

表单项你能选什么
目标系统Windows 10 / Windows 11
架构x64 / arm64
Root 方案8 种任选
谷歌框架MindTheGapps 或无
设备伪装13 个 Pixel 机型或 WSA 默认
压缩格式.7z / .zip

提交后它先做输入校验(比如 Win10 补丁不支持 arm64,这组合会直接拦下),然后构建、压缩、算 SHA256 校验和,产物挂在运行记录的 Artifacts 里下载。自己试一次比读十遍配置都明白。

⚠️ 踩坑速查:常见失败点与排查动作

  • 构建产物没上传到 Release:多半是可复用工作流里的上传步骤没找到对应压缩包,看日志里fail_on_unmatched_files相关报错,确认构建步骤的artifact输出是否为空;
  • 流程在「立标签」一步就停了:tag 已存在会被主动拦下,这是防重复发布的保护,换个版本号重触发即可;
  • 版本检查脚本输出空值:说明抓取页面失败(反爬或页面结构变化),去 MagiskOnWSA/Update Check/ 看对应脚本的抓取逻辑,Release 说明里的组件版本占位符会留着没替换的标记;
  • Windows 10 版包装不上:检查 Win10 补丁步骤是否完整——它要改 AppxManifest.xml 并下载三个替换用 DLL,任何一步失败都会产出「只能 Win11 装」的包;
  • 7z 压缩阶段耗时很长-mmt=8多线程压缩大镜像本来就要好几分钟,别当成超时去杀任务;
  • 想本地复现构建:依赖清单就在 MagiskOnWSA/scripts/ 的 requirements.txt,照它装好 Python 环境再跑 build.sh 即可。

结尾:顺着这几处读下去

  • 工作流总入口:.github/workflows/(update.yml 是发版主线,buildtester.yml 是手动试做入口)
  • 版本探测脚本:MagiskOnWSA/Update Check/
  • 构建与组件生成脚本:MagiskOnWSA/scripts/
  • 安装与使用文档:Documentation/WSABuilds/ 下的 Installation 和 Updating 两篇
  • 仓库地址(如需克隆):git clone https://gitcode.com/GitHub_Trending/ws/WSABuilds

【免费下载链接】WSABuildsRun Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solutions) built in.项目地址: https://gitcode.com/GitHub_Trending/ws/WSABuilds

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询