Android 用户必备的神器,超好用的「神器」 Magisk 该怎样安装、卸载?

Cocoa开发者社区

共 7080字,需浏览 15分钟

 ·

2021-08-18 14:41

作为一个拥有和管理系统最高权限的应用,Magisk App 有一定的使用门槛。差若毫厘,谬以千里,如果不清楚某个开关代表的意义,一个小小的误操作就有可能引发无法开机的严重后果。本文将从官方文档与个人经验出发,为大家介绍 Magisk App。
文章内容和截图基于 Magisk v23,涵盖新 Magisk App 的四个主要功能:安装和卸载 Magisk;授予应用 Root 权限;隐藏 Magisk;获取和管理模块。在奔向 Magisk 的自由天地前,强烈建议你先阅读此文了解少数情况下的应对措施,这也是本文出现在模块推荐文章之前的原因。如果你还不知道如何刷入 Magisk 的话,可以参考《Android 玩家必备神器入门:从零开始安装 Magisk》。

安装和卸载 Magisk

Magisk App 第一屏便是负责 Magisk 镜像安装和卸载的界面。这个页面的功能往往和具体的使用场景绑定在一起,因此,下文用四个不同的情境来介绍 App 这个界面下的几个重要功能。

情境一:安装 Magisk 到原系统

上一篇 从零开始安装 Magisk 的文章中,我们遇到的就是这种情境。结合 Ramdisk 的值,使用 Magisk 图标旁的「安装」> 「选择并修补一个文件」功能,Magisk 会修改我们提取的镜像供我们用 fastboot flash 刷入或者fastboot boot 引导进入系统。
这是 Magisk App 最为基本的用途,除了少部分新机型外,这也是刷入 Magisk 最稳妥的方式。在每一次更新系统后,我们都推荐按此流程重新刷入。

情境二:Magisk 需要更新或者修复

在 Magisk v22 之前,每一次新版本发布都会提供 magisk.zip 与 magisk.apk 两个文件,前者代表着将被注入到系统的 Magisk 本体,后者则代表着用于管理和使用 Magisk 的应用。因此每一次打包 boot.img 镜像或是直接刷入到系统前,都需要下载一次托管于 GitHub 的 magisk.zip,十分不便。
在 Magisk v22 后,.zip 包与 .apk 包合二为一,安装的 Magisk App 本体自带了刷写功能,更新了应用本体即等于更新了即将准备注入到系统的 Magisk,不必频繁请求网络下载。
在检测到系统已经刷入 Magisk 后,Magisk 图标旁的「安装」子界面会多出一个「直接安装」选项。「直接安装」会将和 App 相同版本的镜像刷入系统。如果 Magisk 的一些功能莫名其妙地失效,可以尝试使用此功能重新挂载 Magisk。
而如果需要更新的话,按照前文提到的流程,只需要先在应用内根据提示更新 App 本体,再点击「升级」按钮就能自动刷入。

情境三:进行系统 OTA

系统在下载更新包后,会在安装前进行系统的完整性检查。很多 Root 工具因为修改了底层文件,导致系统无法通过此项检查而不能安装 OTA。Magisk 的优势正是「挂载」而非「改写」。当然,想要完成 OTA 还需要我们的手动操作。
首先,为了防止系统自动安装更新导致更新失败,刷入 Magisk 后的第一步就是关闭系统的「自动安装更新」选项。类 AOSP 的系统中,这个项目一般位于「开发者选项」界面;改动比较大的系统中,这个选项可能位于系统更新 App。
读者应该记得,我们在安装 Magisk 时的确修改了系统的 boot.img 或者 recovery.img。因此,在收到厂商推送的更新后,我们需要点击 Magisk App 首页的「卸载 Magisk」>「还原原厂镜像」(不要重启)来恢复原来的镜像。此时理论上 OTA 应该能够正确安装。
禁止更新图片来自官方文档
下载 OTA 并安装后,系统会提示重启,重启后我们会失去 Magisk。因而我们还需要按照上一篇文章「打包镜像并刷入」章节中提到的提取镜像 > 修改镜像 > 刷入/引导启动镜像的方式再次安装 Magisk。
和 Magisk 本体不同,模块不需要重新安装。Magisk 将模块储存在一个文件夹(/data/adb/modules)中,每次设备开机时,Magisk 会自动挂载该文件夹下的模块。原厂镜像无法挂载这些模块,但并不意味着这些模块文件被删除了;只要重新安装 Magisk,这些「蜇伏」的模块又能生龙活虎。
根据多年以来的刷机经验,分享给诸位一些重装时的技巧:
  1. 并非每一次系统更新都会大幅改动 boot.img 或 recovery.img,也就是说,旧系统被 Magisk 打包过的镜像也极有可能顺利引导启动新系统。如果我们事先保存或者备份过旧系统中经 Magisk 修改过的镜像magisk.img,系统更新后,在 bootloader 界面下用 fastboot boot magisk.img 尝试引导启动旧镜像,若系统和 Magisk 都正常,那么就不必再费心思提取新系统的镜像,点击「安装」>「直接安装」,此时「直接安装」的对象是新系统的分区,这样我们就能顺利为新系统刷入 Magisk 。
  2. Magisk App 能在 A/B 分区设备上保留 Magisk 进行系统更新。若 App 首页的 A/B 一栏值为「是」,我们只需要在重启安装 OTA 前点击 「安装」>「安装到未使用的槽位」选项即可。不过,经知名用户 Clyde 反映,部分在 OTA 时带有分区校验的系统,如 Pixel 的 ROM 使用此方法大概率会发生引导循环。出现相关问题还是直接一点,转用上文提到的通用刷入方式。

携 Magisk 进行系统 OTA 的流程可以总结为:关闭「自动安装更新」> 收到 OTA >「卸载 Magisk」/「还原原厂镜像」> 下载并安装 OTA >
  • A/B 分区为「是」的设备:不重启 >「安装」> 「安装到未使用的槽位」> 重启以更新系统。
  • 其他设备:重启以更新系统 > 重新安装 Magisk。

如果遇到无法更新的问题,尝试不清除用户数据的刷写系统全量包方式,而后重新安装 Magisk。一加等机型在检测到 Magisk 后会自动下载全量包。常备全量包,翻车不慌张。

情境四:完全卸载 Magisk

在「卸载 Magisk」命令下还有一个「完全卸载」,点击此命令会在重启设备后卸载一切已经安装的模块和 Magisk 本身。
这个命令仅在我们想和 Magisk 说永别的时候用。想要卸载单个模块请参考本文第四章内容;Magisk 使设备出现问题时,建议排查 MagiskHide 和可疑模块,而非完全卸载。

授予应用 Root 权限

Android 是以 Linux 为内核的系统,在 Android 上获取 root 类似于在 Linux 上使用了 root 帐户。有了 root 权限,我们便能修改底层文件、注入脚本、调节系统性能、读取更详细的数据……当然,这一切并不需要我们手动去写脚本,我们需要做的只是通过 Magisk 将 root 权限授予给能够完成这些事情的应用们。
索取 root 权限的请求由应用发起,Magisk 此时会跳出类似于 Windows UAC 的弹窗供用户确认。想要防止恶意应用模拟点击,可以在 Magisk App 的设置中开启「生物识别验证」和「点按劫持保护」两个选项。
授权了应用之后,Magisk 默认会在该应用使用 root 权限时弹出通知,并且记录相关的日志。这两个选项隐藏在 Magisk App 的超级用户界面中,通过单击已授权的应用名称,便能找到控制通知和日志的开关。
用户授予 root 权限是将手机的完整控制权交给这个应用,因此请务必保证此应用值得信任。如果你在主力机上使用 root 权限,更应该保持克制和敬畏。
此处另外提一些关于授予 root 权限的小技巧:
  • 不少应用索取 root 其实只是为了获得系统底层的部分权限,这部分授权其实无需 root,我们大可以用 adb 输入一次命令授予,比如我们之前聊过的 Buoy,或是 Gsam Battery Monitor 等电池监控类应用。

  • Root 被认为是一种低效、慢速的处理方式,Shizuku 应运而生。它可以被当作 root 权限与需要 root 权限的应用之间的「中间商」,通过 root/adb 提升权限后,再为那些需要使用系统 API 与 adb 权限的应用授权,这比 root 权限更高效。如果你在使用「小黑屋」、「冰箱」、「App Ops」等应用,建议先安装 Shizuku 后再通过它来为这些应用授权。

通过 MagiskHide 隐藏 Magisk

正因为 root 权限和将要提到的模块所带来的潜在危害,一些涉及版权、金融、通讯功能的应用会事先检查系统是否「完整」,它们若发现系统已 root 或者挂载了一些模块,会以此为由弹出警告乃至直接退出,还可能会对用户可获取的内容做一些限制。为了解决这类应用对用户所造成的不便,Magisk 设计了 MagiskHide 功能。
首先,点击 App 首页右上方的齿轮,勾选「MagiskHide」,这时,Magisk 超级用户界面会多出一个 MagiskHide 子界面。
在针对应用隐藏 Magisk 前,我们可以先试试检验设备能否能通过位于 App 首页的「测试 SafetyNet 证明」。点击位于首页的测试按钮,第一次测试需要下载额外的组件,测试还要求设备能正常访问 Google,因此请确保网络正常。不出意外的话,不久后会弹出「通过证明」的文字。
如果 basicIntegrity 没有通过,说明系统镜像完整性有问题,这一般发生在第三方 ROM 中,我们可以尝试安装 Universal SafetyNet Fix[1] 模块或者更换 ROM 来解决这个问题。如果 ctsProfile 没有通过,大概率是设备或 ROM 未经认证。安装 MagiskHide Props Config[2] 模块一般能解决此问题。模块的安装请跳转到第四章查阅。
确认 SafetyNet 测试通过后,接下来我们勾选想对其隐藏 root 事实的应用。
一般说来,下列四类应用常常有 root 检测行为和反制措施:
  1. 提供版权和地区限制内容的应用:如 Google Play 检测到 root 后,设备会变成「未认证」状态,我们将无法搜索到 Netflix 等流媒体应用。

  2. 支付应用:如云闪付,该应用在检测到 root 后会弹出警告,并直接隐藏指纹支付选项。

  3. 通讯应用:如 ZohoMail,它会在检测到 root 后提示用户登出。

  4. 游戏:部分游戏有严格的反作弊机制,检测到 root 后可能拒绝用户游玩。

通过自己实际遇到的问题或者是翻阅网络资料,我们可以确定对哪些应用隐藏 Magisk。在 MaigskHide 界面直接点击某应用的选择框,Magisk 会自动为我们勾选应用下的组件。如果在勾选之前就已经打开过该应用,我们可能还需要清除一次应用的缓存乃至数据。
根据作者的说法,此功能属于「dirty hack」,在使用时应尽量保持克制。不含有 root 检测机制的应用,不建议勾选。
如果在上述设置后,还发现有应用检测到 root 权限,我们可以打开 Magisk 设置里的「隐藏 Magisk 应用」选项。点选后,Magisk 会更改自己的应用名,用户需要通过搜索或者创建的快捷方式访问改名后的 Magisk App。这样能防止在低版本系统中,部分应用扫描用户应用列表时检测到 Magisk 进而判定系统已 root。

获取和管理模块

模块是大部分用户选择安装 Magisk 的原因,它们是一个个开箱即用的系统修改包或修改包的组件。模块既可以从 Magisk App 中自动下载安装,也可以从网络下载然后手动安装,部分拥有 root 权限的应用还可以越过用户的授权直接安装模块。
由于不同的 Android 设备差异实在太大,同样的模块难以保证完美适用于所有设备;不同的模块、应用和用户对系统的其他修改有时候会产生冲突,进而导致一系列严重问题;一些模块本身也像应用那样,需要有一个逐渐完善的过程;也有的模块本来就是不完整的,需要其他模块的辅助。因此,安装模块千万要遵循流程。设备出现问题后也不要慌,有的是简单且易操作的解决方案。

安装模块的基本流程

安装模块分三步:阅读模块说明 > 确认相关依赖状态 > 安装模块并重启。这三步中,最重要的当属第一步,因为它直接决定了当前模块是否符合自己的需求,能不能安装使用。下面以能在 Magisk App 找到的内容拦截模块 Energized Protection 为例,详细讲解这三步。
我们进入 Magisk App 的第四屏模块界面,利用搜索找到 Energized Protection。点击模块右下的文件夹图标即可阅读它的说明。由于是从 GitHub 上获取,如果模块说明无法加载,你可以尝试开启设置中的「安全 DNS」。这些应用内模块实际上都托管在 Magisk Modules[3] 库下,我们也可以选择使用电脑访问 相关的 Repo[4] 来阅读模块说明。
模块说明中最重要的是两部分内容:模块的依赖和用法。许多模块是协同其他模块或 App 工作,在安装这些模块之前,必须确定相关依赖的状态。例如,Energized Protection 告诉我们它需要 Systemless Hosts 这个模块,Magisk 20.4 之前的版本还需要安装 Busybox for Android NDK。它使用的方法是命令行,因而我们还需要一个 Android 平台的终端,比如说 Termux[5]
确认这些依赖都装好了之后,点击「安装」,重启系统,这个模块才算安装完成。如果安装的模块和你素未谋面,那么本文不建议一口气安装很多个。
不在 App 列表中的模块,例如 NotoCJK,模块说明在发布处,安装模块需要使用模块界面最上方的「从本地安装」命令,然后选择下载的模块压缩包。

模块翻车后的自救

安装模块后手机出现应用闪退、显示错误和无法开机等种种异常,大概率是使用的某个模块出了问题。针对不同情况,目前有五种比较简单的自救方式:
  • 如果还能访问 Magisk App,在模块界面中,「移除」出问题的模块,然后重启以完全卸载此模块。
  • 如果已经无法打开 Magisk App,但能使用 adb,用数据线连接电脑,输入 adb wait-for-device shell magisk --remove-modules,这会删除所有模块并重启。
  • 如果连 adb 都不能访问,那么请尝试进入安全模式。不同机型安全模式启用方式不同:开机状态下,比较常见的启用方式是按住电源键呼出的重启按钮;关机状态下,一般能通过特定的实体按键激活。进入安全模式后,Magisk 会自动禁用所有模块。再重启一次,模块禁用的状态会被保留,设备应当能恢复正常。
  • 如果装有第三方 Recovery,利用 Recovey 的文件管理功能(高级 > 文件管理),定位到/data/adb/modules,将其中的问题模块重命名为「remove」,Magisk 会在重启时自动卸载该模块。更简单粗暴的方式是直接删除该目录下问题模块文件。
  • 装有第三方 Recovey 时,我们还能将 Magisk.apk 重命名为uninstall.zip ,在 Recovery 下刷入,这可以完全卸载 Magisk,潇洒弃坑走人。

Magisk 让设备具有了极高的自由度的同时,也让其承担着很大的风险。但欲戴其冠,必承其重,因此本文在展示 Magisk App 的四项核心功能的同时,也附带阐述了如何携 Magisk 正常进行 OTA,如何解决模块翻车等重要问题。
这些应当措施能最大限度地保证设备数据的安全,不过想要防「翻车」于未然,最重要的还是提高自己的鉴别能力与信息搜集能力,谨慎对待那些来源可疑的模块和应用。
引用链接
[1] Universal SafetyNet Fix:
https://github.com/kdrag0n/safetynet-fix
[2] MagiskHide Props Config:
https://github.com/Magisk-Modules-Repo/MagiskHidePropsConf
[3] Magisk Modules:
https://github.com/Magisk-Modules-Repo
[4] 相关的 Repo:
https://github.com/Magisk-Modules-Repo/energizedprotection
[5] Termux:
https://termux.com/

本文由多位作者联合撰写

主作者
 柯帕
联合作者
 路中南




浏览 393
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报