总述

本文将介绍三种主流 Root(Magisk、KernelSU、APatch)的安装,并介绍它们的一些技巧提示。

开始之前,请确保您已经刷入了 TWRP 3.7.0、1170 底包的系统,并有且只有一种可用的 Root 方式。

必备前置知识

救砖

内核切换方法

切换、更新、修改内核有三种方法:

  1. 从别人那里要来 boot.img 刷入
  2. 将内核镜像(.gz/.gz-dtb)用 AnyKernel3 刷入
  3. 将内核镜像(Image)用 magiskboot 打包入 boot.img 刷入

Magisk

安装 Magisk

  1. 下载 Magisk 最新版 APK 文件,并安装到手机中。
  2. 打开 Magisk Manager,点击左上角的 “安装” 按钮,选择空白的 Boot 镜像文件,修补。
  3. 使用 TWRP 备份 Boot 分区,刷入修补好的 boot.img 到 Boot 分区,然后重启手机。
  4. 重启后会提示需要修复环境,不要点击修复,按返回键拒绝。选择安装,取消勾选 “安装到 Recovery”,然后重启。

Magisk 注意事项

  1. Wenhao 新版内核由于未知原因不适用 Magisk,将会导致手机随机重启入 EDL 模式或高通救援模式,并且无法使用微信视频通话和 QQ 视频通话,请勿尝试。
  2. 修复 Magisk 运行环境与更新 Magisk 时,务必取消勾选 “安装到 recvoery” 这个选项,高版本 Magisk (26.1+)会默认启用这个选项,错误刷入后会导致 WLAN 无法打开以及 Recovery 无法进入。
    如果您不慎安装到了 Recovery,请提取卡刷包内的 boot.img 和 recovery.img 重新刷入对应分区,或者干脆重刷完整包。
  3. “Ramdisk” 为 “否” 是正常的,是 R11 (s) 设备的特性,影响 Magisk 功能。
  4. 使用 Magisk Delta(后改名 Kitsune Mask)将难以在除 Kitsune 自己的群组之外的社区得到技术支持,也不需要且无法使用 ShamikoZygiskNext(包括衍生)。
  5. Alpha 禁止在 Android 内修改 /system,介意勿用。但你要知道:这十分有利于安全。

Magisk 技巧提示

  1. Magisk APK 相当于刷机包。当 Magisk 出现 “掉 Root 权限”“获取不到 Root 权限”“Zygisk 反复注入失败” 等问题,而三方 Recovery 又可用时,您可以通过将 Magisk.apk 重命名为 Magisk.zip 并刷入来修复。
  2. Magisk 有多个 Fork,各 Fork 各有不同。若您想切换不同的的 Fork,除了在三方 Recovery 中刷入 Magisk.zip 外,还可以在已有的 Magisk Manager 中授予将要安装的 Magisk Manager Root 权限,并重新启动准备安装的 Magisk Manager。此时准备安装的 Magisk Manager 应当有 “无法获取版本信息”“必须重新安装”“修复运行环境” 等提示,重新安装即可。

KernelSU

安装 KernelSU

在第三方 Recovery 中把 AnyKernel3-xxx-xxxx-xxx.zip 刷入即可

KernelSU 注意事项

  1. KernelSU 在 1.x 版本中移除了 non-GKI 支持,因此不适用于 R11 设备。R11 设备请使用 0.9.5 及以下版本。
  2. KernelSU 在 0.9.3 版本中更改了管理器检测方式,在 ColorOS 6 上会引起卡二屏。请使用 0.9.2 及以下版本。
  3. 安装模块超级慢的情况暂时无解。
  4. KernelSU 禁止在 Android 内修改 /system,介意勿用。但你要知道:这十分有利于安全。
  5. KernelSU 没有申请 Root 权限的机制。在授予应用程序 Root 后,应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限!
  6. KernelSU 暂未有较好的隐藏挂载点泄漏的方法。

APatch

安装 APatch

  1. 下载 APatch 最新版 APK 文件,并安装到手机中。
  2. 打开 APatch Manager,点击右上角的 “安装” 按钮,选择空白的 Boot 镜像文件,修补。
  3. 使用 TWRP 备份 Boot 分区,刷入修补好的 boot.img 到 Boot 分区,然后重启手机。

APatch 注意事项

  1. 更新 APatch 管理器后需进行两步更新:
    1. 点击主页面更新以更新系统补丁(APatch)
    2. 重新修补并刷写 Boot 分区以更新 KernelPatch
  2. APatch 禁止在 Android 内修改 /system,介意勿用。但你要知道:这十分有利于安全。
  3. APatch 没有申请 Root 权限的机制。在授予应用程序 Root 后,应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限!
  4. 若您使用了他人修补的 boot.img,务必重新设置密钥!
  5. Scene 及其附属模块暂不支持 APatch,请勿尝试安装。

APatch 技巧提示

  1. 可通过使用内核模块 Cherish Peekaboo 隐藏一些挂载点。(作者:GarfieldHan,暂停更新)
  2. 可通过特殊方法使用 Shamiko,但非常不建议。(作者:GarfieldHan)
  3. 有报告开机掉 Wifi 或不能使用 SIM 卡,也有开机黑屏的情况。此问题正加紧研究,已知的预防方法是关机前关掉 Wifi 与移动数据开关,待开机后再开启。若出现问题,请重新修补并刷写 Boot 分区,关闭 Wifi 与移动数据开关,重启一到三次。
  4. 有报告开机桌面会崩溃一次并自动恢复正常,怀疑与 QuickSwitch 冲突,暂未确定问题是否出在 APatch。由于 DotOS 使用了 QuickSwitch,所以可能出现问题,故开机后请不要马上开始操作手机。

推荐学习

自己编译内核

如果您对已有的内核不满意,想要自己修改一下;或者等不及更新,按捺不住追版本号的激动,那下面的内容正合您胃口。

编译内核是一项较为浩大的工程,所以我们用 Github CodeSpace 编译。当然,您也可以选择本地计算机。但是,使用 CodeSpace 有相当的优势:

  1. 自带完美的、几乎无性能损耗的 Ubuntu,免除安装、调试系统的烦恼
  2. Ubuntu 是较为常规、通用、可靠的 Linux 发行版,有助于避免在一些小众发行版上的问题
  3. 编译内核很占 CPU、内存和磁盘 IO,会影响本地计算机的使用

启动!

Fork 自己中意的仓库,建立它的 CodeSpace,各项配置拉满。

环境搭建

首先,您需要准备好编译环境。

选择一个合适的位置,下载 Linaro GCC 4.9Google GCC Android 9,记下路径。

选择一个合适的位置,git clone Proton Clang,记下路径。

环境变量

设置必需的环境变量。

1
2
3
4
5
export ARCH="arm64"
export SUBARCH="arm64"
export PATH=$PATH:/path/to/gcc/bin
export CROSS_COMPILE=aarch64-xxxxxxxxxx
export OPPO_TARGET_DEVICE="MSM_nnnnn" # R11 MSM_16051,R11s MSM_17011
1
2
3
4
5
export ARCH="arm64"
export SUBARCH="arm64"
export PATH=$PATH:/path/to/clang/bin
export CROSS_COMPILE=aarch64-xxxxxxxxxx
export OPPO_TARGET_DEVICE="MSM_nnnnn" # R11 MSM_16051,R11s MSM_17011

编译

1
2
3
# 拉取子模块
git submodule init
git submodule update
1
2
make O=out sdm660-perf_defconfig
make -j$(nproc --all) O=out 2>&1 | tee kernel_log.log
1
2
make O=out sdm660-perf_defconfig CC=clang
make -j$(nproc --all) O=out CC=clang 2>&1 | tee kernel_log.log

打包内核

  1. 提取一个原版 boot.img,要求不带有 Magisk
  2. 回到 CodeSpace,依次展开目录 ./out/arch/arm64/boot/,将 Image 下载下来备用
  3. 下载 Magisk.apk(适用于 Linux/MacOS,方法为解压后在 libs 里找到并提取 x86_64 的 libmagiskboot.so)或 magiskboot(适用于 Windows),得到 magiskboot 备用
  4. magiskboot unpack boot-origin.img
  5. Image 替换掉 kernel,保持 kernel 名称不变
  6. magiskoot repack,刷入得到的 new-boot.img
  1. 回到 CodeSpace,依次展开目录 ./out/arch/arm64/boot/,将 Image-gz.dtb 下载下来备用
  2. CY 团队下载站上有好多 AnyKernel3 的 zip,挑一个自己机型的下载下来
  3. 用第一步得到的 Image-gz.dtb 替换掉 AnyKernel3-xxx-xxxx-xxx.zip 里的 Image-gz.dtb

参考资料

拓展阅读

鸣谢