旧手机优化计划之二 - Root
总述
本文将介绍三种主流 Root(Magisk、KernelSU、APatch)的安装,并介绍它们的一些技巧提示。
开始之前,请确保您已经刷入了 TWRP 3.7.0、1170
底包的系统,并有且只有一种可用的 Root 方式。
必备前置知识
救砖
- 救砖 | KernelSU
- 救砖 | APatch Docs
logcat
、dmesg
、/proc/kmsg
等抓取日志的方法- 基本的 Git 知识
内核切换方法
切换、更新、修改内核有三种方法:
- 从别人那里要来 boot.img 刷入
- 将内核镜像(.gz/.gz-dtb)用 AnyKernel3 刷入
- 将内核镜像(Image)用 magiskboot 打包入 boot.img 刷入
Magisk
安装 Magisk
- 下载 Magisk 最新版 APK 文件,并安装到手机中。
- 打开 Magisk Manager,点击左上角的 “安装” 按钮,选择空白的 Boot 镜像文件,修补。
- 使用 TWRP 备份 Boot 分区,刷入修补好的 boot.img 到 Boot 分区,然后重启手机。
- 重启后会提示
需要修复环境
,不要点击修复,按返回键拒绝。选择安装,取消勾选 “安装到 Recovery”,然后重启。
Magisk 注意事项
- Wenhao 新版内核由于未知原因不适用 Magisk,将会导致手机随机重启入 EDL 模式或高通救援模式,并且无法使用微信视频通话和 QQ 视频通话,请勿尝试。
- 修复 Magisk 运行环境与更新 Magisk 时,务必取消勾选 “安装到 recvoery” 这个选项,高版本 Magisk (26.1+)会默认启用这个选项,错误刷入后会导致 WLAN 无法打开以及 Recovery 无法进入。
如果您不慎安装到了 Recovery,请提取卡刷包内的 boot.img 和 recovery.img 重新刷入对应分区,或者干脆重刷完整包。 - “Ramdisk” 为 “否” 是正常的,是 R11 (s) 设备的特性,不影响 Magisk 功能。
- 使用
Magisk Delta
(后改名Kitsune Mask
)将难以在除Kitsune
自己的群组之外的社区得到技术支持,也不需要且无法使用Shamiko
和ZygiskNext
(包括衍生)。 Alpha
禁止在 Android 内修改/system
,介意勿用。但你要知道:这十分有利于安全。
Magisk 技巧提示
- Magisk APK 相当于刷机包。当 Magisk 出现 “掉 Root 权限”“获取不到 Root 权限”“Zygisk 反复注入失败” 等问题,而三方 Recovery 又可用时,您可以通过将 Magisk.apk 重命名为 Magisk.zip 并刷入来修复。
- 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 注意事项
- KernelSU 在 1.x 版本中移除了 non-GKI 支持,因此不适用于 R11 设备。R11 设备请使用 0.9.5 及以下版本。
- KernelSU 在 0.9.3 版本中更改了管理器检测方式,在 ColorOS 6 上会引起卡二屏。请使用 0.9.2 及以下版本。
- 安装模块超级慢的情况暂时无解。
- KernelSU 禁止在 Android 内修改
/system
,介意勿用。但你要知道:这十分有利于安全。 - KernelSU 没有申请 Root 权限的机制。在授予应用程序 Root 后,应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限!
- KernelSU 暂未有较好的隐藏挂载点泄漏的方法。
APatch
安装 APatch
- 下载 APatch 最新版 APK 文件,并安装到手机中。
- 打开 APatch Manager,点击右上角的 “安装” 按钮,选择空白的 Boot 镜像文件,修补。
- 使用 TWRP 备份 Boot 分区,刷入修补好的 boot.img 到 Boot 分区,然后重启手机。
APatch 注意事项
- 更新 APatch 管理器后需进行两步更新:
- 点击主页面更新以更新系统补丁(APatch)
- 重新修补并刷写 Boot 分区以更新 KernelPatch
- APatch 禁止在 Android 内修改
/system
,介意勿用。但你要知道:这十分有利于安全。 - APatch 没有申请 Root 权限的机制。在授予应用程序 Root 后,应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限!
- 若您使用了他人修补的 boot.img,务必重新设置密钥!
- Scene 及其附属模块暂不支持 APatch,请勿尝试安装。
APatch 技巧提示
- 可通过使用内核模块 Cherish Peekaboo 隐藏一些挂载点。(作者:GarfieldHan,暂停更新)
- 可通过特殊方法使用 Shamiko,但非常不建议。(作者:GarfieldHan)
- 有报告开机掉 Wifi 或不能使用 SIM 卡,也有开机黑屏的情况。此问题正加紧研究,已知的预防方法是关机前关掉 Wifi 与移动数据开关,待开机后再开启。若出现问题,请重新修补并刷写 Boot 分区,关闭 Wifi 与移动数据开关,重启一到三次。
- 有报告开机桌面会崩溃一次并自动恢复正常,怀疑与 QuickSwitch 冲突,暂未确定问题是否出在 APatch。由于 DotOS 使用了 QuickSwitch,所以可能出现问题,故开机后请不要马上开始操作手机。
推荐学习
自己编译内核
如果您对已有的内核不满意,想要自己修改一下;或者等不及更新,按捺不住追版本号的激动,那下面的内容正合您胃口。
编译内核是一项较为浩大的工程,所以我们用 Github CodeSpace 编译。当然,您也可以选择本地计算机。但是,使用 CodeSpace 有相当的优势:
- 自带完美的、几乎无性能损耗的 Ubuntu,免除安装、调试系统的烦恼
- Ubuntu 是较为常规、通用、可靠的 Linux 发行版,有助于避免在一些小众发行版上的问题
- 编译内核很占 CPU、内存和磁盘 IO,会影响本地计算机的使用
启动!
Fork 自己中意的仓库,建立它的 CodeSpace,各项配置拉满。
环境搭建
首先,您需要准备好编译环境。
选择一个合适的位置,下载 Linaro GCC 4.9 或 Google GCC Android 9,记下路径。
选择一个合适的位置,git clone
Proton Clang,记下路径。
环境变量
设置必需的环境变量。
1 | export ARCH="arm64" |
1 | export ARCH="arm64" |
编译
1 | # 拉取子模块 |
1 | make O=out sdm660-perf_defconfig |
1 | make O=out sdm660-perf_defconfig CC=clang |
打包内核
- 提取一个原版
boot.img
,要求不带有 Magisk - 回到 CodeSpace,依次展开目录
./out/arch/arm64/boot/
,将Image
下载下来备用 - 下载 Magisk.apk(适用于 Linux/MacOS,方法为解压后在 libs 里找到并提取 x86_64 的
libmagiskboot.so
)或magiskboot
(适用于 Windows),得到magiskboot
备用 magiskboot unpack boot-origin.img
- 用
Image
替换掉kernel
,保持kernel
名称不变 magiskoot repack
,刷入得到的new-boot.img
- 回到 CodeSpace,依次展开目录
./out/arch/arm64/boot/
,将Image-gz.dtb
下载下来备用 - CY 团队下载站上有好多 AnyKernel3 的 zip,挑一个自己机型的下载下来
- 用第一步得到的
Image-gz.dtb
替换掉AnyKernel3-xxx-xxxx-xxx.zip
里的Image-gz.dtb
参考资料
- WenHao2130/android_kernel_oppo_sdm660
- 如何为非 GKI 内核集成 KernelSU | KernelSU
- [基础教程] 如何编译一个 ARM64 架构的自定义内核・tiann/KernelSU・Discussion #950
- [基础教程 2] 如何使用 AnyKernel 3 打包内核・tiann/KernelSU・Discussion #952
- 安装 | APatch Docs
拓展阅读
鸣谢
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 猫说 Meow!
评论
TwikooWaline