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

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

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

目录
相关文章
|
存储 缓存 JavaScript
python实战篇:利用request库打造自己的翻译接口
python实战篇:利用request库打造自己的翻译接口
262 1
python实战篇:利用request库打造自己的翻译接口
|
C语言 开发者
模块化程序设计
模块化程序设计
549 0
|
3月前
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
652 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
4月前
|
Android开发
安卓硬改一键新机工具,一键修改手机型号,串号网卡Imei、sn码【仅供学习参考】
声明部分:仅供学习参考使用,基于Xposed框架实现的设备信息伪装模块的完整代码,包含多个功能模块:
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
1076 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
Android开发
android|Magisk注入Zygisk的过程
android|Magisk注入Zygisk的过程
1463 1
 android|Magisk注入Zygisk的过程
|
存储 算法 Android开发
AVB校验微观版本:android avb(Android Verified Boot)验证
AVB校验微观版本:android avb(Android Verified Boot)验证
1765 0
|
存储 Linux Android开发
Android底层:通熟易懂分析binder:1.binder准备工作
本文详细介绍了Android Binder机制的准备工作,包括打开Binder驱动、内存映射(mmap)、启动Binder主线程等内容。通过分析系统调用和进程与驱动层的通信,解释了Binder如何实现进程间通信。文章还探讨了Binder主线程的启动流程及其在进程通信中的作用,最后总结了Binder准备工作的调用时机和重要性。
Android底层:通熟易懂分析binder:1.binder准备工作
|
监控 Linux Shell
Linux命令setsid深度解析
`setsid`是Linux命令,用于创建新会话并运行命令,使其独立于终端,不受用户注销影响。它创建新会话和进程组,进程成为领头进程。常用在后台任务,如数据处理和守护进程。示例:`setsid ping baidu.com`。注意需手动重定向I/O,结合`nohup`使用更佳。适用于长时间运行的服务和脚本管理。
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
1075 0