本文作者:柯帕,路中南 | 首发地址:https://sspai.com/post/67932

少数派上一篇介绍 Magisk 本体的文章还是在两年前,两年间,Android 大版本从 9 来到了 12,Magisk 开发者 John Wu 也从 Apple 跳槽到了 Google。物换星移,人去梁空,这个神奇的开源项目却没有因此止步不前。现在的 Magisk 有着广泛的兼容性和繁荣的模块生态,依然是每一个 Android 玩家必备的神器。

五月,Magisk 发布了 v23,并悄然更新了安装教程,删改了过时内容。本文以此教程为基础,重新介绍 Magisk 官方推荐的刷入方式以及其他要点。一些内容为照顾新手玩家而作,有一定知识储备的玩家可以按需跳过。

Magisk 简介

Magisk 是一个安全、美观且非常强大的 Android 自定义工具。它主要有以下三个功能:

  • MagiskSU:获取设备 Root 并经用户授权给应用;
  • Magisk Modules:下载、挂载与管理模块,模块则能个性化各种系统设置;
  • MagiskHide:对选定应用隐藏设备已 Root 的事实和 Magisk 自身的存在。

imgRoot 管理,模块管理,MagiskHide 三个界面

如果想在 Android 设备上管理 root 权限,或是实现某些深度自定义的功能(比如替换字体、调控性能等),那么刷入 Magisk 就是你目前最好的选择,而且「貍猫换太子」的挂载方式使得 Magisk 对现有的系统文件不会造成影响。其原理和安全性如何,可以查看少数派一篇旧文的前两部分:

由于 Android 阵营厂商众多,的确很难保证他们步伐齐一,也就不存在某种一定通行的「通法」能够搞定任一 Android 设备的 Magisk 刷入。因此建议新手在入门时先行寻找当前机型的讨论,检查是否大多数玩家已经成功刷入/是否有额外步骤后再行尝试下文介绍的「通法」。(三星华为手机有刷入方法,但比较复杂,本文暂不涉及)

此「通法」大致分为以下几个步骤:检查设备,准备工具 > 安装 Magisk App > 提取镜像 > 使用 App 修改镜像 > 刷入镜像。这五个步骤大部分有图形界面辅助,少部分的命令行操作可以直接复制粘贴。

img

下文展示每个步骤的详细内容。如果你是新手玩家,请完整阅读文章内容后再上手。

检查设备,配置工具

磨刀不误砍柴工,第一步是检查和准备:检查设备的安卓版本、配置好 ADB 和 Fastboot,以及解锁 Bootloader。安装失败的原因往往是设备的特异性,安装中各类奇怪报错往往是因为没有配置好工具。

检查 Android 版本

Magisk 23 仅支持 Android 5.0 及以上的版本,你可以在手机设置 -> 系统信息 & 关于手机的字眼下看到目前 ROM 的 Android 版本。目前给出的最高支持版本是 11。Android 12 截止到目前的 beta 3 据玩家测试都可以正确安装,风险自负。低于 5.0 版本的手机需要更新系统或者装更低版本的 Magisk,低版本的安装方式可以参考 此文。Magisk 历史版本均可在 Github 上的 发布页 找到。

配置 adb 和 fastboot

adb 和 fastboot 是我们针对 Android 设备进行高级调试和安装的工具。如果你已经安装了 chocohomebrew 等包管理工具的话,Windows 输入choco install adb universal-adb-drivers -y,Mac 输入 brew install android-platform-tools 能最方便的完成 adb 和 fastboot 的配置。

我们也可以手动安装:Windows 用户可以参照 Windows 操作系统下的 ADB 环境配置 这篇文章;macOS 用户可以尝试 此脚本 或是参考 使用 Mac 为 Android 手机刷原生系统 进行手动配置。最后最最不济,可以尝试在 Google 开发者页面 下载对应 adb 包,解压后在对应的目录下执行指令亦可,或者是尝试 WebADBadb 在线执行器 这样的在线 adb 工具,比较考验浏览器的兼容性。

adb 安装后 Windows 用户需要安装驱动。个人建议下载一个泛用型驱动 universal adb drivers。少数情况下不能识别的话,需要我们用「手机厂商名 + adb driver」的关键词搜索得到相关的下载和安装教程。安装了驱动后,Windows 设备管理器中才会出现相应的设备。

img

配置完 adb 环境,玩机路上的最最重要的地基已经打好,但若要将手机设置为可被调试的状态,我们还是要麻烦点上几步:

  • 打开「设置」应用,进入「关于本机」或类似的界面;
  • 连续点击「版本号」,直到提示开发者选项已开启;
  • 进入「开发者选项」;
  • 打开「USB 调试」选项,MIUI 或 ColorOS 用户 需要额外放权操作。

此时,连接电脑,打开终端,输入adb devices,如果返回了设备名称,说明 adb 配置完成;用 adb reboot bootloader 进入 fastboot 界面,键入 fastboot reboot 后,若设备重启,说明 fastboot 正常。

img

解锁 Bootloader

不解锁 bootloader 则无法对设备进行底层的自定义。对于 Android 玩家这样的小众群体来说,bootloader 能否解锁甚至成为了购机参考中的决定性因素。

一般来说,在开发者选项中基本都有一个名为「OEM 解锁」的选项。除了少部分流入我国市场的国外运营商有锁机外,此选项基本都可供用户开启。

有的厂商为此选项附加了一定的条件:例如小米需要在 解锁申请页面 申请;索尼与 Moto 都需要向官方申请解锁码,一般几分钟内搞定;Google Pixel 和早期的一加手机都无需等待,打开 OEM 解锁选项后输入一下命令,然后在接下来的页面中手动操作。

adb reboot Bootloader # 重启手机到 Bootloader 界面
fastboot flashing unlock # 进行解锁,部分厂商需要在此附上解锁码

解锁 Bootloader 后会立即清空手机中所有数据,但这也是很多玩机操作必经的第一步,建议尽早开启。解锁 Bootloader 还意味着手机等私密设备的安全性大大下降,不少厂商也会在解锁政策上附加上不少「条款」:三星设备解锁后会永久性熔断 KNOX 安全认证;索尼手机解锁后会丢失专有图像算法;大部分手机的版权认证 DRM 等级也会从 L1 下降至 L3 等。

综上所述,我们不建议你在主力机上解锁 Bootloader,一定要那样做的话,请知晓这一操作可能造成的风险官方已经明确表示不能解锁 BL 的,请知难而退

打包镜像并刷入

下面我们开始真正上手刷入 Magisk 。

Tips:从 Magisk 22 开始,不再区分刷写用的 .zip 包与安装管理器用到的 .apk 应用安装包,二者合一且只有后缀的区别,默认提供 .apk 包,更改后缀为 .zip 后即可被刷写。

安装 Magisk App,查看 Ramdisk

在刷入前,我们先安装 Magisk App 来检查设备的信息,来确定进一步的操作。我们先到 官方项目地址 下载 apk 文件安装。

img

打开安装后的 Magisk App,像上面的最后一张截图一样,你能看到一项名为 Ramdisk 的值。请确保此项的值为「是」「True」,我们再进行下一步。

Tips:极少数小米设备存在检测设备信息错误的问题,Ramdisk 虽然显示为「否」,但实际上是需要修改 boot.img。

若 Ramdisk 值为「否」,请结合附录相关章节阅读全文。

获取 boot.img

boot.img 镜像一般来说都可以从当前使用的 ROM 的压缩包中找到。

官方 ROM 的压缩包,例如 Google小米Moto,由厂商发布,可从固定的发布页面、机型论坛等获取相关链接。一些厂商同时提供了 OTA 包和全量包,我们优先下载全量包,解压后即可获得 boot.img,也就是我们所需要的 boot 分区的镜像文件。

img小米全量包下载界面

如果你使用的是第三方开发者制作的 ROM,也同样需要下载系统全量包解压获取,而部分开发者也会单独释出 boot.img 为玩家提供便利。如果你比较幸运,在论坛中有人分享了自己修改好的镜像,可以直接获取进行刷写。

Tips:如果你下载的是 OTA 包或解压系统包后只能得到一个体积较大的 payload.bin 文件,请跳转至附录查看如何使用开源工具解压(需 python 环境)

img第三方 ROM 的 boot.img 一般在根目录

而解压小米手机的线刷包后,能在 images 文件夹中找到 boot.img:

img

保险起见,将**要用到的镜像保留一份在电脑上以备不测,**之后将其复制到手机上。

使用 App 修改镜像

第三步我们获得了 boot.img,并将它复制到了手机上。下面我们将用 Magisk App 修改这些镜像。如果你下载的是别人修改好的镜像的话,直接跳过这一步。

打开手机 Magisk 应用 > 安装 > 选择并修补一个文件 > 选择复制进去的 boot.img > 开始。等待滚动的命令行显示 All Done。

img

修改好的镜像会被存储在手机的下载文件夹中,名称以「magisk_patched」开头,将这个镜像再传回电脑。改个短的名字(可选)。

img

fastboot 模式下刷入镜像

复制修改镜像后的完整路径,在终端中输入:

## 手机重启到 bootloader
adb reboot bootloader 
## 如果 Ramdisk 为 yes
fastboot flash boot <修改后的 boot.img 路径> 
 ## 刷入完成后重启
fastboot reboot

Tips,要得到文件的完整路径:

  • 在 macOS 中,直接拖动文件到终端窗口,会生成对应文件的路径
  • 在 Windows 中,选中文件 > Shift + 右键,会多出「复制为路径」命令

如果想要谨慎一点,比如说修改的镜像文件是从网上下载的,想先试试看能否正常启动,则可以用命令:fastboot boot。这样顺利启动系统后即可暂时拥有 Magisk ,不过重启后就会失效。确认没有问题后,再打开 Magisk App 中选择安装 > 直接安装,来「永久」写入 Magisk。

最终,当我们能在 App 中看到「当前」一栏的版本号且重启不会消失时,恭喜你,安装成功。

更新和卸载

一旦安装成功,以后更新 Magisk 就不用这么麻烦了。Magisk App 的「安装」选项会在你成功刷入镜像后多出来一个「直接安装」选项。点此选项就能升级 Magisk。同样,卸载也可以通过 Magisk App 首页的「卸载 Magisk」按钮来实现。

img

常见问题

就目前来看,安装 Magisk 后出现的各类问题大多数情况下都不是因为 Magisk 本身,而是因为安装刷入后又陆续刷入的来源不明的 Magisk 模块或者授予 root 权限的不明应用。如果你同时还想刷入第三方内核的话,建议先刷 Magisk 再刷第三方内核,这样也能知晓问题出在哪一方身上。

因为未知原因导致安装失败也不要怕,在步骤「获取 boot.img」是我们保留了一份原来的镜像,按照最后一步的方法将原来的镜像重新刷回去就能正常开机。

在使用 Magisk 的过程中,可能会出现了 App 闪退或拒绝启动,可以尝试使用 Magisk Hide 来针对这些 app 隐藏 Magisk 的存在。而如果你因为安装了未知模块而翻车无法顺利进入系统,请先冷静下来:解决此类问题有一个万能的命令adb wait-for-device shell magisk --remove-modules ,此条指令将会在手机启动过程中生效。

关联阅读:一日一技 | Magisk 模块「翻车」,没有 TWRP 如何救砖?

Magisk App 内容会在之后的文章中更详细的讲述。

参考资料

  1. Magisk 项目地址:https://github.com/topjohnwu/Magisk
  2. 官方论坛:https://forum.xda-developers.com/f/magisk.5903/
  3. 官方教程:https://topjohnwu.github.io/Magisk/
  4. 常见问题:https://www.didgeridoohan.com/magisk/HomePage

附录:Ramdisk 为「否」的机型安装流程

Ramdisk 是系统中的一个小分区,Ramdisk 告诉系统接下来要加载哪些东西。Magisk 的目的是修改 Ramdsik,把自己加进开机需要加载的系统组件中。App 中 Ramdisk 的值为「否」时,表示需要修改的 Ramdisk 被放在了 recovery.img 中,我们需要提取并修改 recovery.img。

整个流程仍然分为五步,但部分环节有所不同:

  1. 检查设备,配置工具
  2. 安装 App,此时 Ramdisk 显示为「否」
  3. 下载当前系统的全量包,如果你使用了第三方 Recovery,那么 recovery.img 就是这个第三方的镜像。提取 recovery.img,备份,然后传到手机上
  4. 修改镜像:在选择修补文件后,会多出一个「Recovery Mode」的选项。记得勾选
  5. 刷入镜像:使用的命令是 fastboot flash recovery <修改后的 recovery.img 路径>

这五步完成后,重启手机。和修改 boot.img 不同的是,我们需要立即按下设备进入 Recovery 的组合键,这样才能挂载 Magisk。这是因为我们是通过修改 recovery.img 的方式挂载 Magisk 的,只有在按下组合键的情况下,设备才会启动 recovery 分区,从而实现 Magisk 的挂载。

按下组合键后,设备不会进入 Recovery 模式,而是会闪屏过后直接进入一个有 Magisk 的系统。每一次重启都要这样做才能挂载 Magisk。进入系统后就没有特别需要注意的问题了。

而想要进入真正的 Recovery ,我们需要在按下组合键后的闪屏界面长按音量 + 键。

附录:解压 OTA 包获取其中的 boot.img

一般来说像 Google 给出的刷机包,解压其中的 image 包可以直接获得我们想要的各种镜像文件。但部分厂商给出的升级包以及部分第三方 ROM 的刷机包中解压出来只有 payload.bin,无法进一步解压获得我们想要的各种镜像文件。

img

解压 payload.bin 需要用到特殊的工具,我们可以在 Github 上找到开源的 payload dumper,这是一个基于 python 3 的命令行工具。

以 zip 格式下载源代码,本地解压得到 payload_dumper-master 文件夹,下属两个 py 后缀的 python 文件。将 ROM 的 .zip 包解压缩后,把其中的 payload.bin 文件移送到 payload_dumper-master 中。

pip3 install protobuf #安装 protobuf
## 定位到 payload_dumper-master 文件夹
python3 -m pip install protobuf
python3 -m pip install -r requirements.txt
python3 payload_dumper.py payload.bin

img

附录:自定义恢复模式刷入法

一般来说我们的 Android 手机都有恢复模式(Recovery),这个模式独立于 Android 系统之外,主要用于升级或者修复手机的 Android 系统。TWRP 就是一种经过自定义的恢复模式,玩家可借助这类自定义恢复模式来便捷地完成系统级操作,包括刷入 Magisk。

自定义恢复模式刷入法无需考虑 Ramdisk 是 Yes 还是 No,但 TWRP 的更新适配往往跟不上新机型、新系统的速度,Magisk 官方文档中亦已不再推荐使用自定义恢复模式刷入法

除了文中第二节提到的三个准备,使用此方法我们还需要

  • 下载 Magisk.apk 并重命名为 Magisk.zip
  • 提前准备一个兼容的第三方 Recovery

根据有没有 Recovery 分区分为两种情况:

如果你的手机具备 Recovery 分区,可考虑通过 adb 命令刷入自定义恢复模式镜像文件:

adb reboot bootloader #进入fastboot模式
fastboot flash recovery <recovery.img 路径>

之后,使用组合键或者 adb reboot recovery重启到恢复模式。进入自定义恢复模式后输入锁屏密码解锁 data 分区,找到 Magisk.zip 安装包刷入即可。

手机没有 recovery 分区的话,则可以像刚刚那样使用 boot 命令启动(而不是刷入)自定义恢复模式镜像文件。如果你的自定义恢复模式并不支持解密 data,我们也可以尝试使用 adb sideload 命令从电脑端为手机刷入 magisk。

为方便理解,以既没有 recovery 分区、配套 TWRP 又过于老旧不支持解密 data 分区的 Pixel 2 为例,演示用 TWRP 来刷入 Magisk。

电脑端准备好(过时的)TWRP.img 与 Magisk Installer.zip。Pixel 连上手机并已开启 USB 调试选项。

adb reboot bootloader
Fastboot boot 指定目录/twrp.img

手机开机 > 进入 TWRP > 要求输入密码 > 跳过 > 允许修改系统。在 TWRP 中选中「高级」、「adb sideload」,使 TWRP 处于接受 sideload 的状态。电脑终端方面,输入指令:adb sideload 指定目录/magisk.zip。等待刷写完成后开机即可。