AME.

从源码构建

构建 Windows x64 安装程序。

使用 GitHub Actions 编译

  • 打开仓库的 Actions → Build Setup;点击 Run workflow,选择分支并运行。编译自己的修改时,先 Fork 并启用 Actions。
  • 运行成功后,从 Artifacts 下载 AMExclusive-Setup-x64,解压得到 AMExclusive-Setup.exe。下载需登录 GitHub,产物保留 14 天。
  • 仅手动触发,构建 Windows x64 Release 并检查内嵌安装文件,不自动发布 Release。构建机无需安装 Apple Music;安装和使用 AMExclusive 的电脑仍需安装。

本地构建环境

  • Windows x64;Apple Music 或独立 WinUI 元数据目录。
  • Visual Studio 2022+/Build Tools:MSVC x64 C++ 工具与 Windows 11 SDK。
  • CMake 3.24+、PowerShell。

构建文件与目标

源码文件职责与修改入口
.github/workflows/build-setup.ymlworkflow_dispatch 手动入口;Windows x64 Release、Setup 内嵌文件验证及 14 天 Artifact 上传。
mod/CMakeLists.txtC++20 / Windows x64 / 静态 MSVC runtime;FetchContent 获取 MinHook v1.3.4,生成 WinUI 投影并定义全部产物。
mod/scripts/Build-Mod.ps1Configuration=Debug|Release,BuildDirectory=build;可通过 WinUIMetadataDirectory 指定独立元数据,否则读取本机 Appx 包;配置 CMake、构建及复制分发文件。
mod/scripts/Get-WinUIMetadata.ps1从 NuGet 下载固定版本 WinUI 与配套元数据,只提取 .winmd;校验 Microsoft.UI.Xaml.winmd 的固定 SHA-256。
mod/scripts/Generate-SetupResources.ps1将固定生产 payload、安装脚本与许可证写入生成的 Setup .rc 资源。
mod/src/SetupInstaller.cpp单文件安装器入口;调整安装界面与执行流程。
mod/scripts/Install-Mod.ps1安装与升级;与 Uninstall-Mod.ps1 配套维护。
mod/scripts/Register-Companion.ps1注册当前用户的伴生计划任务;安装目录与进程生命周期约束。
mod/config/am-exclusive.ini默认 [mod] 配置:mode=exclusive,period_100ns=200000(20 ms);由 Broker 目标复制到输出目录。
mod/src/SetupResources.hAMMOD_RESOURCE_*:安装器资源 ID,需与资源生成脚本、Setup 读取保持一致。
mod/scripts/Uninstall-Mod.ps1卸载实现:停止进程、删除任务及安装状态;保留安装路径校验。
mod/scripts/Uninstall.cmdWindows 卸载入口,转调 Uninstall-Mod.ps1 并传回退出码。

获取源码

git clone https://github.com/AntiOblivionis/AMExclusive.git
cd AMExclusive

构建 Release

在仓库根目录运行。脚本按需通过 Visual Studio DevShell 加载 MSVC;默认从本机 Apple Music 包读取元数据,以 x64 配置 CMake 并构建单文件安装器。

.\mod\scripts\Build-Mod.ps1 -Configuration Release

未安装 Apple Music 时构建

与 Action 使用同一个元数据下载脚本。WinUI 版本固定为 1.8.251222000,配套依赖也固定;仅用于生成 C++/WinRT 投影,不安装 UI 运行库,也不将其 DLL 打包进 Setup。

.\mod\scripts\Get-WinUIMetadata.ps1 -OutputDirectory .\mod\build\winui-metadata
.\mod\scripts\Build-Mod.ps1 -Configuration Release -WinUIMetadataDirectory .\mod\build\winui-metadata

目标与产物对应

  • am_exclusive_hook → am-exclusive-hook.dll:HookDll、IPC、音质锁与 audio_v2。
  • am_exclusive_ui → am-exclusive-ui.dll:UiAdapter 与 IPC。
  • am_exclusive_broker → am-exclusive-broker.exe:Broker 与 IPC。
  • am_exclusive_media_control → am_exclusive_media_control.exe:MediaSessionControl.cpp。
  • am_exclusive_setup → AMExclusive-Setup.exe:SetupInstaller.cpp 与生成的 .rc 资源。

产物

  • 分发文件:mod\build\dist\AMExclusive-Setup.exe。
  • 构建目录:mod\build;二进制:mod\build\Release。
  • 运行 Setup → 1 安装/升级,→ 2 卸载。

独立构建目录

相对目录位于 mod 下;本例分发到 mod\build-release\dist。脚本会重建所选构建目录中的 dist 文件夹。

.\mod\scripts\Build-Mod.ps1 -Configuration Release -BuildDirectory build-release

构建失败

  • 找不到 MSVC:安装 x64 C++ 工作负载,或使用 x64 开发者 PowerShell。
  • 找不到 CMake:加入 PATH,或安装 Visual Studio 的 CMake 工具。
  • 找不到 Apple Music 包:安装 Apple Music,或按上面的独立元数据流程传入 WinUIMetadataDirectory。
  • cppwinrt.exe 或元数据缺失:检查 Windows SDK 与 APPLE_MUSIC_PACKAGE_DIR;后者可指向 Apple Music 包或完整独立元数据目录。哈希校验失败时不要跳过校验,应重新下载。
  • 首次 FetchContent 失败:检查 Git 与到 MinHook 仓库的网络连接。

直接使用 CMake

在 x64 开发者 PowerShell 中从仓库根目录执行。首次配置需要网络获取 MinHook;cppwinrt.exe 从 APPLE_MUSIC_PACKAGE_DIR 读取元数据并写入 build-dev/generated/winrt。该参数也可指向独立元数据目录。不要修改生成的头文件。

  • 直接 CMake 构建产生 build-dev/Release 下的组件和安装器;不会执行 Build-Mod.ps1 的 dist 复制步骤。
  • 单目标增量构建示例:cmake --build mod/build-dev --config Release --target am_exclusive_hook。需要完整分发时构建 am_exclusive_setup。
  • 公开源码快照不附带私有验证套件;需要自行为修改增加测试,并完成真实设备播放验证。
$amPackage = Get-AppxPackage -Name AppleInc.AppleMusicWin
cmake -S mod -B mod/build-dev -A x64 "-DAPPLE_MUSIC_PACKAGE_DIR=$($amPackage.InstallLocation)"
cmake --build mod/build-dev --config Release --parallel