菜单

构建系统

相关源文件

Magisk 构建系统是一个全面的框架,用于管理包括原生二进制文件(C++ 和 Rust)和 Android 应用程序在内的所有 Magisk 组件的编译和打包。本文档涵盖了构建系统的架构、配置选项、构建命令以及构建不同组件的流程。

有关从源代码构建 Magisk 的信息,请参阅 从源代码构建

架构概述

Magisk 构建系统以一个 Python 脚本(build.py)为中心,该脚本协调整个构建过程。此脚本协调多个构建工具以创建最终的工件。

来源: build.py1-835 gradle.properties1-35 build.gradle.kts1-8

构建配置

构建系统从多个来源读取配置

  1. build.py 的命令行参数
  2. config.prop(可选的自定义配置文件)
  3. gradle.properties(项目范围的 Gradle 设置)

定义在 gradle.properties 中的关键属性

magisk.stubVersion=40
magisk.versionCode=28103
magisk.ondkVersion=r29.1

这些属性控制构建中使用的版本号和 NDK 版本。

来源: build.py697-734 gradle.properties32-34

命令行界面

The build.py 脚本提供了一个丰富的命令行界面,用于构建 Magisk 的不同组件。

主要命令

命令描述
all构建所有内容(原生二进制文件和所有应用)
native [targets]构建原生二进制文件
app构建 Magisk 应用
stub构建存根应用
test构建测试应用
clean [targets]清理构建产物
ndk设置 Magisk NDK
emulator为开发设置 AVD
avd_patch修补 AVD 的 ramdisk.img 或 init_boot.img
cargo对项目运行 cargo 命令
clippy在 Rust 源文件上运行 clippy
rustup设置 rustup 包装器

选项

  • -r, --release - 以发布模式构建
  • -v, --verbose - 详细输出(可多次使用)
  • -c, --config - 自定义配置文件(默认为 config.prop)

示例

# Build everything in release mode
./build.py -r all

# Build only native binaries
./build.py native

# Build specific native targets
./build.py native magisk magiskinit

# Clean build artifacts
./build.py clean

# Build the Magisk app with custom config
./build.py -c custom_config.prop app

来源: build.py736-822

原生构建流程

原生构建流程负责编译构成 Magisk 核心二进制文件的 C++ 和 Rust 组件。

原生构建会生成以下关键二进制文件:

  • magisk - Magisk 主守护进程
  • magiskinit - 引导过程中运行的初始化二进制文件
  • magiskboot - 用于解包/重打包引导映像的工具
  • magiskpolicy - 用于修改 SELinux 策略的工具
  • resetprop - 用于操作系统属性的工具

这些二进制文件使用 C++ 和 Rust 组件的混合方法进行构建。

来源: build.py186-221 build.py230-274 build.py310-338

Android 应用构建流程

Android 应用构建流程使用 Gradle 来构建三个主要组件:

  1. Magisk 主应用 - 主要用户界面
  2. 存根应用 - 用于更新的最小化应用
  3. 测试应用 - 用于测试目的

应用构建流程包括几个步骤:

  1. 查找合适的 JDK 安装
  2. 运行相应模块的 Gradle 构建
  3. 对生成的 APK 进行签名
  4. 将 APK 移动并重命名到输出目录

主应用将原生二进制文件和存根 APK 作为资源包含在内。

来源: build.py346-376 build.py378-416 build.py424-428 build.py430-442

环境设置

要使用 Magisk 构建系统,您的环境必须满足这些要求:

  1. Python 3.8+ - 构建脚本是用 Python 编写的
  2. Android SDK - 构建 Android 组件所需
  3. JDK 21 - Gradle 和 Android 构建所需
  4. Rust 工具链 - 用于构建 Rust 组件

构建系统依赖于这些环境变量:

  • ANDROID_HOMEANDROID_SDK_ROOT - Android SDK 的路径
  • ANDROID_STUDIO(可选)- 用于 JDK 检测的 Android Studio 路径

可以使用以下命令自动设置 NDK:

./build.py ndk

此命令下载并安装 Magisk 所需的特定 NDK 版本。

来源: build.py56-61 build.py513-530 build.py346-376

自定义构建

您可以通过创建 config.prop 文件或使用 -c 选项指定自定义配置文件来定制构建。您可以设置的关键属性包括:

  • version - 版本字符串(默认为提交哈希)
  • versionCode - 版本代码(默认为 1000000)
  • outdir - 输出目录(默认为 "out")
  • abiList - 要构建的 ABI 的逗号分隔列表(默认为所有支持的 ABI)

示例 config.prop

version=25.0-custom
versionCode=25000
outdir=custom_build
abiList=arm64-v8a,x86_64

来源: build.py680-733

CI/CD集成

构建系统设计用于在持续集成环境中工作。整个构建过程可以通过以下方式实现自动化:

python build.py -r all

此命令以发布模式构建所有组件,在输出目录中生成最终的工件。

来源: build.py483-487

构建系统文件

构建系统由以下关键文件组成:

  • build.py - 主构建脚本
  • gradle.properties - 项目范围的 Gradle 设置
  • build.gradle.kts - 根 Gradle 构建文件
  • app/build.gradle.kts - 应用模块构建文件
  • buildSrc/src/main/java/Setup.kt - Gradle 构建设置代码

来源: build.py1-835 gradle.properties1-35 build.gradle.kts1-8 app/build.gradle.kts1-6 buildSrc/src/main/java/Setup.kt1-496