MagiskBoot编译解包打包boot.img

devtools/2024/10/21 4:03:18/

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

编译环境准备

1. Windows下启用开发者模式,因为需要 symbolic link 支持
image.png

image.png

2. 安装 python3.8+,并配置PATH环境变量

# 查看python版本信息
py --version
# 查看所有已安装的 Python 解释器路径
py -0p

3. git 启用 symbolic links

# 启用 symbolic links
git config --global core.symlinks true
# 查看 git 配置
git config --global --list

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

5. 下载 Magisk 源码

# 下载 Magisk 源码
git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git# 如果子模块克隆失败,可以手动克隆这些子模块。进入对应的子模块路径,然后执行以下命令
git submodule update --init --recursive

6. 运行 ./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 文件已经生成
image.png

magiskboot____56">使用 magiskboot 解包&打包内核

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

magiskboot___67">在Windows下使用magiskboot

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

image.png

新建 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 环境变量
image.png

# 解包 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


http://www.ppmy.cn/devtools/103949.html

相关文章

华为HCIA考试大纲

数据通信与网络基础 ● 数据通信网络基础 ■ 数据通信基础概念 ■ 信息传递的过程 ■ 网络设备及基本功能 ■ 网络类型及拓扑类型 ■ 网络工程 ■ 网络工程师 ● 网络参考模型 ■ 数据及…

解锁.NET安全奥秘:敏感数据加密与哈希的深度揭秘

在 .NET 应用中保护敏感数据:加密与哈希的深入探讨 随着数字化时代的不断发展,数据安全已经成为企业和开发者面临的首要挑战之一。在 .NET 应用程序中,保护敏感数据不被未授权访问、篡改或泄露至关重要。为此,加密与哈希技术被广…

大数据5v特性、集群、分布式

目录 数据分析六部曲 大数据的特点 (5v特征) 分布式与集群的区别 常用的分布式方案 数据分析六部曲 明确分析目的和思路:确保分析框架的体系化和逻辑性,简单来说就是先分析什么,后分析什么,使得各个分析…

Java项目中的分库分表实践指南

摘要 随着互联网应用的快速发展,单一数据库实例越来越难以满足高并发和大数据量的需求。分库分表是一种有效的解决方案,它通过将数据分散存储到不同的数据库或表中来提高系统的扩展性和性能。本文将详细介绍Java项目中实现分库分表的策略、步骤和最佳实…

鸿蒙(API 12 Beta3版)【使用智能PhotoPicker】Media Library Kit媒体文件管理服务

智能PhotoPicker是基于PhotoPicker的高阶功能,可以从大量图片中根据配置的智能推荐参数,快速筛选出符合条件的图片,并在PhotoPicker中推荐给用户选择。 应用拉起PhotoPicker时,可以配置智能推荐参数。当设备中有满足应用传入的智…

经验风险最小化和极大似然估计的关系

一、经验风险定义 给定一个训练数据集 T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T{(x1​,y1​),(x2​,y2​),...,(xN​,yN​)},模型f(X)关于训练数据集的平均损失称为经验风险(Empirical…

spring security 会话管理

一、简介 当浏览器调用登录接口登录成功后,服务端会和浏览器之间建立一个会话(Session)浏览器在每次发送请求时都会携带一个 Sessionld,服务端则根据这个 Sessionld 来判断用户身份当浏览器关闭后,服务端的 Session 并不会自动销毁&#xff0…

vue ref和reactive区别

Vue 3中的ref和reactive都是用于创建响应式数据的API,但它们在数据类型、使用方式、访问方式、设计理念以及应用场景等方面存在明显的区别。 数据类型:ref主要用于定义简单类型(如字符串、数字、布尔值等)和单一对象,…