Provision跨平台编译指南:dub、CMake与树莓派工具链的完整配置教程
【免费下载链接】ProvisionSet of tools interracting with Apple servers. Don't hesitate to leave a star if you appreciate it.项目地址: https://gitcode.com/gh_mirrors/pr/Provision
Provision 是一套运行在 Linux 上、与 Apple 服务器交互的工具集,包含设备注册库 libprovision、Anisette 配给服务 anisette_server 以及请求头获取工具 retrieve_headers。本文将从零讲清 Provision 的三种构建路径:dub 快速编译、CMake + Ninja 完整构建,以及树莓派 2/4 工具链的交叉编译配置,帮助你在任何平台上顺利跑起来。
⚠️安全提示:请勿使用你的主力 Apple 账号!官方建议使用备用账号,ADI 数据保存在
~/.adi/adi.pb,切勿泄露。
一、Provision 有什么?先认识 3 个核心组件
| 组件 | 类型 | 作用 |
|---|---|---|
| libprovision | 静态库 | 在 Apple 服务器上注册设备,获取 ADI 数据 |
| anisette_server | 可执行文件 | 为 AltServer-Linux 等第三方软件提供 Anisette 配给服务 |
| retrieve_headers | 可执行文件 | 注册设备后在终端输出 JSON 格式的识别请求头 |
| mkcassette | 可执行文件 | 可选构建的辅助工具 |
运行时依赖:除二进制本身外,还需要把 Apple Music APK(Android 版)中的lib/文件夹解包到可执行文件旁边,可只保留libstoreservicescore.so和libCoreADI.so两个库以减小体积。
二、编译前置:一键安装 D 语言开发环境
编译 Provision 需要D SDK(编译器 + dub 包管理器),可选安装 libplist:
# Debian / Ubuntu 示例 sudo apt install ldc dub ninja-build # 或使用 GDC 编译器 sudo apt install gdc-12Dockerfile 中使用的构建依赖可作为参考:ldc、git、clang、dub、libz-dev,见 Dockerfile。
三、dub 快速编译:三步出可执行文件
最简单的方式是用 dub 构建,三个命令即可:
git clone https://gitcode.com/gh_mirrors/pr/Provision --recursive cd Provision dub build -b release--recursive会拉取 cmake/cmake-d 等子模块,不要省略- 产物统一输出到
bin/目录(在 dub.sdl 中通过targetPath "bin"配置) - dub.sdl 定义了 4 个包:主库
provision和 3 个子包retrieve-headers、mkcassette、anisette-server - 静态链接 anisette-server(Docker 镜像同款命令):
dub build -c static -b release --compiler=ldc2 :anisette-server
四、CMake + Ninja 完整构建:树莓派工具链配置详解
4.1 标准构建流程
mkdir build && cd build cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release ninjaCMakeLists.txt 中的关键选项:
| 选项 | 默认值 | 说明 |
|---|---|---|
build_anisetteserver | ON | 是否构建 Anisette 服务 |
build_mkcassette | OFF | 是否构建 mkcassette |
use_native_plist | OFF | 改用 D 语言原生 plist 解析器 |
link_libplist_dynamic | OFF | 运行时动态加载 libplist |
plist 解析有三级回退:优先用系统libplist-2.0(pkg-config 探测),其次静态链接 libplist-d,最后警告并使用内置 fallback 解析器。第三方依赖(requests ~2.0.9、slf4d ~2.1.1、handy-httpd ~5.2.1)由 cmake/dependencies.cmake 通过 dub 自动拉取,无需手动安装。
4.2 树莓派 4 交叉编译(aarch64)
项目自带 toolchains/ 目录,为树莓派 4 准备了完整工具链文件。以 toolchains/rpi-4.cmake 为例,它指定了aarch64-linux-gnu-gcc-12/g++-12/gdc-12编译器组合,并将 sysroot 指向/usr/aarch64-linux-gnu/sys-root:
mkdir build-rpi4 && cd build-rpi4 cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=../toolchains/rpi-4.cmake ninja4.3 树莓派 2 交叉编译(ARMv7 32 位)
老款树莓派 2 是 32 位 ARM 架构,使用 toolchains/rpi-2.cmake,编译器前缀为arm-linux-gnueabihf-,其余流程与 4 相同。若你的交叉编译器没有-12版本后缀,可用无后缀版本:toolchains/rpi-4-no-suffix.cmake。
工具链文件还设置了-defaultlib=:libgphobos.a -fall-instantiations等 D 编译标志,专供 gdc 编译器交叉链接使用。
4.4 Windows 交叉编译
项目同时支持面向 Windows 的交叉编译,toolchains/windows.cmake 仅两行,核心是告诉 LDC 目标三元组:
SET(CMAKE_SYSTEM_NAME Windows) SET(CMAKE_D_COMPILER "ldc2;-mtriple=x86_64-windows-msvc")配置方式与树莓派一致:-DCMAKE_TOOLCHAIN_FILE=../toolchains/windows.cmake。
五、常见问题排查清单
- 找不到 libplist:系统没装 libplist 时会打印
Using fallback Property list parser警告,属正常降级,不影响出包;想彻底避免可安装libplist-2.0-dev - dub 报错子模块缺失:重新 clone 时务必带
--recursive - gdc 交叉编译链接失败:确认使用了带
-defaultlib=:libgphobos.a的工具链文件(toolchains/rpi-4.cmake 第 30 行已内置) - 运行时缺少 .so:把 Apple Music APK 里的
lib/文件夹放到可执行文件旁
六、源码导航:快速定位关键文件
- 项目总览与下载说明:README.md
- 构建入口:CMakeLists.txt、dub.sdl
- 依赖声明:cmake/dependencies.cmake
- 核心库源码:lib/provision/adi.d、lib/provision/compat/linux.d
- ADI 技术原理文档:docs/ADI.md
- 树莓派/Windows 工具链:toolchains/
- 容器化部署定义:Dockerfile
✅ 到这里,Provision 的 dub、CMake 与树莓派工具链三大构建路径就全部掌握了。建议先从 dub 快速编译验证环境,再按需切换到 CMake 交叉编译部署到树莓派等目标设备。
【免费下载链接】ProvisionSet of tools interracting with Apple servers. Don't hesitate to leave a star if you appreciate it.项目地址: https://gitcode.com/gh_mirrors/pr/Provision
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考