MagiskBoot编译&解包&打包boot.img

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/

编译环境准备

  1. Windows下启用开发者模式,因为需要 symbolic link 支持
  1. 安装 python3.8+,并配置PATH环境变量

    查看python版本信息

    py --version

    查看所有已安装的 Python 解释器路径

    py -0p

  2. git 启用 symbolic links

    启用 symbolic links

    git config --global core.symlinks true

    查看 git 配置

    git config --global --list

  3. 安装 Android Studio ,设置环境变量 ANDROID_HOME 为 Android SDK 文件夹的路径。该路径可以在 Android Studio 的设置中找到。

  4. 下载 Magisk 源码

    下载 Magisk 源码

    git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git

    如果子模块克隆失败,可以手动克隆这些子模块。进入对应的子模块路径,然后执行以下命令

    git submodule update --init --recursive

  5. 运行 ./build.py ndk,下载并安装 NDK。

    py .\build.py ndk

编译MagiskBoot

# 编译 native 模块,包括 magiskinit magisk magiskboot magiskpolicy
py .\build.py native

# 编译所有模块
py .\build.py all

编译成功后,在 Magisk\native\out\arm64-v8a 目录下可以看到 magiskboot 文件已经生成

使用 magiskboot 解包&打包内核

# 解包 boot.img
./magiskboot unpack boot.img

# 重新打包 img,得到一个 new-boot.img
./magiskboot repack boot.img

在Windows下使用magiskboot

magiskboot_build 上下载 magiskboot-e159716-release-windows-mingw-w64-msvcrt-i686-standalone.zip并解压到 D:\App\magiskboot 目录下

新建 unpack.bat,扩展 magiskboot 使其可指定解压目录

@echo off
:: 检查是否提供了 IMG_PATH 参数
if "%~1"=="" (
    echo 请提供boot.img文件的路径作为参数!
    exit /b 1
)

:: 获取当前批处理文件所在的目录
set "SCRIPT_DIR=%~dp0"

:: 将相对路径转换为绝对路径
for %%I in ("%~1") do (
    set "IMG_PATH=%%~fI"
    set "OUTPUT_DIR=%%~dpI%%~nI"
)

:: 创建输出目录(如果不存在)
if not exist "%OUTPUT_DIR%" (
    mkdir "%OUTPUT_DIR%"
)

:: 解包 boot.img 到输出目录
cd "%OUTPUT_DIR%"
"%SCRIPT_DIR%magiskboot" unpack "%IMG_PATH%"

echo 解包完成,文件已解包到 "%OUTPUT_DIR%" 目录中。

新建 repack.bat,根据指定解压目录重新打包 img,并把 new-boot.img 存放在解压目录下

@echo off
:: 检查是否提供了解包目录路径作为参数
if "%~1"=="" (
    echo 请提供解包目录的路径作为参数!
    exit /b 1
)

:: 获取当前批处理文件所在的目录
set "SCRIPT_DIR=%~dp0"

:: 将相对路径转换为绝对路径并获取解包目录名称
for %%I in ("%~1\.") do (
    set "UNPACK_DIR=%%~fI"
    set "UNPACK_NAME=%%~nxI"
)

:: 检查是否成功获取目录名称
if "%UNPACK_NAME%"=="" (
    echo 无法获取解包目录的名称!
    exit /b 1
)

:: 获取 UNPACK_DIR 的父目录路径
for %%I in ("%UNPACK_DIR%\..") do (
    set "PARENT_DIR=%%~fI"
)

:: 设置新的 BOOT_IMG 路径,位于 UNPACK_DIR 的父目录
set "BOOT_IMG=%PARENT_DIR%\%UNPACK_NAME%.img"

:: 切换到解包目录
cd "%UNPACK_DIR%"

:: 打包回 boot.img
"%SCRIPT_DIR%magiskboot" repack "%BOOT_IMG%"

echo 打包完成,新的 "%BOOT_IMG%" 已生成并存放在 "%UNPACK_DIR%"。

将 magiskboot 解压路径添加到系统 Path 环境变量

# 解包 boot.img
unpack .\boot.img
# 重新打包 img,得到一个 new-boot.img 在 boot 目录下
repack .\boot\

源码地址:https://github.com/CYRUS-STUDIO/MagiskBootWindows

参考:
Magisk V26.1 编译
在 macOS/Windows/Linux 上使用 magiskboot

相关推荐
Python私教1 小时前
JavaScript 基于生成器的异步编程方案相关代码分享
android·javascript·okhttp
文 丰1 小时前
【Android Studio】app:compileDebugJavaWithJavac FAILED解决办法
android·ide·android studio
寰宇软件2 小时前
Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
android
文 丰2 小时前
【Android Studio】2024.1.1最新版本AS调试老项目(老版AS项目文件、旧gradle)导入其他人的项目
android·ide·android studio
Yongqiang Cheng3 小时前
在线查看 Android 系统源代码 Android Code Search
android·在线查看·android 系统源代码·code search
CYRUS STUDIO3 小时前
LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)
android·刷机·lineageos·android源码编译
竹等寒4 小时前
中间件常见漏洞
android·web安全·网络安全·中间件
zeruns8026 小时前
如何用安卓玩Java版Minecraft,安卓手机安装我的世界Java版游戏的教程
android·java·智能手机·minecraft·mc
我命由我123457 小时前
ADB 之 logcat 极简小抄(过滤日志、保存日志到文件)
android·运维·adb·android studio·安卓·运维开发·android-studio
不吃饭的猪8 小时前
mysql一主2从部署
android·mysql·adb