Magisk 最新版本 V24.1 源码编译踩坑集锦

本文档详细记录了编译Magisk源码的过程,包括下载源码、处理子模块依赖、安装编译环境、解决编译过程中遇到的错误,如colorama模块缺失、环境变量设置、源码不完整等问题,最后成功编译出app-debug.apk。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Magsik 官网 https://github.com/topjohnwu/Magisk/

一、下载 Magsik 源码

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

二、下载 jni 依赖子模块源码

进入刚刚下载好的 Magisk 根目录执行如下命令

git submodule update --init --recursive

所依赖的子模块如下

H5odY9.png

看你网络情况,大概率你是下载不全的。下载到的模块信息如下

PS E:\github_workspace\Magisk> git submodule update --init --recursive
Submodule path ‘native/jni/external/dtc’: checked out ‘c0c2e115f82ed3bc5f9d3f9e5380f0f7e81a1c21’
Submodule path ‘native/jni/external/lz4’: checked out ‘d44371841a2f1728a3f36839fd4b7e872d0927d3’
Submodule path ‘native/jni/external/nanopb’: checked out ‘c9124132a604047d0ef97a09c0e99cd9bed2c818’
Submodule path ‘native/jni/external/parallel-hashmap’: checked out ‘7684faf186806e2c88554a78188c18185b21f127’
Submodule path ‘native/jni/external/pcre’: checked out ‘8e12681a1a252fd581830b2f65d1e154a2030bb9’
Submodule path ‘native/jni/external/xz’: checked out ‘2327a461e1afce862c22269b80d3517801103c1b’

下载不全编译就出各种错误,经过我仔细查看后得到解决办法

单独去 clone 下载失败的子模块源码,然后将其 copy 到 Magisk\native\jni\external 对应文件夹

子模块对应的下载 url 可以在 Magisk.gitmodules 中找到,其中 zlib 和 pcre 需要替换成清华源

比如这里面的 libcxx 和 zlib,单独建个临时文件夹,然后执行

git clone https://github.com/topjohnwu/libcxx.git

git clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/external/zlib

git clone https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/external/pcre

如果出现 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 问题,就多尝试就好,

github 网站有时候访问不太稳定

三、安装编译环境

python 3.8 下载安装

openJDk11 下载安装

android-studio-2021.1.1.21 下载安装

说明,最新版本的 Magisk 使用 jdk11 而且需要高版本 AS 才能编译成功。

四、导入 Magisk 源码到 AndroidStudio 编译

H5b3h4.png

第一次编译需要先下载 ndk,执行指令 build.py ndk

出现错误

Traceback (most recent call last):
File “E:\github_workspace\Magisk\build.py”, line 42, in
import colorama
ModuleNotFoundError: No module named ‘colorama’

解决办法

执行 pip install colorama

然后再次执行 build.py ndk

出现错误

Please add Android SDK path to ANDROID_SDK_ROOT environment variable!

解决办法

Magisk\build.py 中 52 行之前增加 ANDROID_SDK_ROOT 对应路径,你自己的 AS sdk 路径可打开

local.properties 查看

os.environ.setdefault('ANDROID_SDK_ROOT', "D:\AndroidDevelop\sdk")

if 'ANDROID_SDK_ROOT' not in os.environ:
    error('Please add Android SDK path to ANDROID_SDK_ROOT environment variable!')

然后再次执行 build.py ndk

E:\github_workspace\Magisk>build.py ndk

  • Downloading android-ndk-r23b-windows.zip

至此 ndk 下载成功

接下来开始 Magsik apk

继续执行指令 build.py all

出现错误

e: E:\github_workspace\Magisk\buildSrc\src\main\java\Codegen.kt: (235, 16): Unresolved reference: transferTo
e: E:\github_workspace\Magisk\buildSrc\src\main\java\Setup.kt: (216, 79): Unresolved reference: transferTo
e: E:\github_workspace\Magisk\buildSrc\src\main\java\Setup.kt: (223, 74): Unresolved reference: transferTo

解决办法

根据提示将对应 transferTo 调用注释,这个我在 github issues 中查过,并没有什么好的解决办法

继续执行指令 build.py all

出现错误

D:/AndroidDevelop/sdk/ndk/magisk/build//…/build/core/build-binary.mk:643: Android NDK: Module magisk depends on undefined modules: cxx
D:/AndroidDevelop/sdk/ndk/magisk/build//…/build/core/build-binary.mk:656: *** Android NDK: Note that old versions of ndk-build silently ignored this error case. If your project worked
on those versions, the missing libraries were not needed and you can remove those dependencies from the module to fix your build. Alternatively, set APP_ALLOW_MISSING_DEPS=true to allow
missing dependencies. . Stop.

Build binary failed!

解决办法

这个是由于一开始我的子模块 libcxx 源码没有下载完全导致的,后来重新 clone 后再编译通过了。

继续执行指令 build.py all

出现错误

  • Building binaries: magisk magiskinit magiskboot busybox

jni/magiskboot/compress.cpp:111:45: error: use of undeclared identifier ‘crc32_z’; did you mean ‘crc32’?
zo{}, out(nullptr), outsize(0), crc(crc32_z(0L, Z_NULL, 0)), in_total(0), bp(0) {
^~~~~~~
crc32
jni/external/zlib\zlib.h:1780:23: note: ‘crc32’ declared here
ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
^
jni/magiskboot/compress.cpp:159:15: error: use of undeclared identifier ‘crc32_z’; did you mean ‘crc32’?
crc = crc32_z(crc, in, len);
^~~~~~~
crc32
jni/external/zlib\zlib.h:1780:23: note: ‘crc32’ declared here
ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
^
2 errors generated.
make: *** [D:/AndroidDevelop/sdk/ndk/magisk/build//…/build/core/build-binary.mk:478: obj/local/armeabi-v7a/objs/magiskboot/magiskboot/compress.o] Error 1
make: *** Waiting for unfinished jobs…

Build binary failed!

解决办法

根据提示找到 compress.cpp 将 crc32_z 调用改成 crc32 即可

再次重新执行指令 build.py all,漫长的等待终于编译成功

E:\github_workspace\Magisk>build.py all

  • Building the stub app

注: E:\github_workspace\Magisk\stub\src\main\java\com\topjohnwu\magisk\DownloadActivity.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。

Output: out\stub-release.apk

  • Building binaries: magisk magiskinit magiskboot busybox

  • Building the Magisk app

注: E:\github_workspace\Magisk\app\shared\src\main\java\com\topjohnwu\magisk\StubApk.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

Output: out\app-debug.apk

最终 out 文件下的 app-debug.apk 就是我们期待已久的面具,安装到设备上完美运行,接下来就可以魔改了

H5XbJU.png
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cczhengv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值