安卓刷机笔记 | 华为荣耀10
永远记得备份。
一些名词
Bootloader
设备启动步骤中的第一个东西。可以 boot 进入 fastboot
模式,recovery
模式或者 system
。
Fastboot 模式
似乎也可以直接叫 bootloader
。在这里可以用电脑上的 fastboot
程序通过 usb 刷入一些镜像。
常用命令:
fastboot boot <img file>
boot 进入指定的镜像文件fastboot flash <partition> <img file>
将指定的镜像文件刷入指定分区。会覆盖原有镜像。
常见报错:
- 运行
fastboot
时 提示Waiting for devices
: 需要用sudo
来运行fastboot
,否则无法识别设备。
Recovery
在这里可以进行更多的操作。厂商预置的 recovery 一般会有清除 cache ,重置设备之类的功能。刷入第三方 recovery 后则可以进行更多的操作,比如刷入系统镜像,备份分区等等。常用的第三方 recovery 有 TWRP 等。
常见报错:
- 运行
adb
时提示no devices
: 需要用sudo
来运行adb
,否则无法识别设备。
eRecovery
华为手机特有的东西。一定程度上可以保证手机不会变砖,因为它提供了在线下载官方 rom 进行恢复的操作。
2023.04.21 更新:华为官方似乎不再提供荣耀10的系统下载,所以 eRecovery 中下载并恢复选项不能用了。
荣耀10的一些按键组合
华为手机很怪。真的很怪。
以下按键组合在荣耀10上可以工作。别的型号可能会不同。
标注 usb 表明需要用数据线连接;标注 no-usb 表示需要断开数据线;否则无要求。
进入 fastboot
(usb) 按住音量下不放,开机/重启直到进入 fastboot 。
进入 recovery
(no-usb) 按住音量上不放,按住电源键不放开机/重启;手机震动过后,显示 logo 时可以松开电源键,但音量上依旧保持按住,直到进入 recovery 。
- 或者:在 eRecovery 中选择 恢复出厂设置,输入 yes 重启。因为恢复出厂设置似乎实际是启动 recovery 。(不保证在所有设备一致。不对重置导致的数据丢失负责。)
进入 eRecovery
(适用于解锁过 bootloader )开机/重启,在提示 设备已解锁不受信任 的界面根据提示*按住音量键上三秒以上。
*如果没有这个提示直接开机了(刚装过 magisk 似乎会有这种情况),可以先做一次上述进入 recovery 的操作。
刷机一般步骤
解锁 bootloader
解开 bootloader 锁之后才能用 fastboot
命令刷入镜像。步骤:
- 将系统降级至 emui 9。可以在华为手机助手的“升级系统”功能里选择“其他版本”找到旧版本。如果没有 emui 9的选项,需要下载旧版华为手机助手。
- 关闭“查找我的手机”,退出华为账号。
- 获得解锁码 。华为官方关闭了这个申请通道
- 用解锁码解锁 bootloader (fastboot 的标准解锁命令不能用,需要用一个特殊的程序“华为BL解锁工具箱.exe”)。
因为解锁码已经无法从官方渠道获取,可以去淘宝找人远程破解。解锁码可以记下来,之后如果自己锁上了想再解开就可以自己操作了(需要上述步骤4提到的程序)。
解锁完成后在 fastboot 模式中会显示 Unlocked 。启动时也会显示设备不受信任的提示界面。
刷入第三方 recovery (可选)
fastboot flash recovery_ramdisk <img file>
recovery_ramdisk
是荣耀10特殊分区策略的产物,它实质上类似 recovery
分区。虽然名字中有 ramdisk
, 荣耀10是并没有 ramdisk
的。
TWRP 3.5 经测试在荣耀10基本可用。不能用的功能比如数据的解密。
2023.04.21 更新:
在网上搜到了原 recovery,在这里提供一份下载。在我这里配合 9.1.0.337 的 EMUI 可以重新锁上 bootloader。
可以用 TWRP 在刷系统镜像前进行备份。主要是 system 分区,尤其是现在 eRecovery 的下载并恢复选项不再可用。
清除数据
一般 recovery 中都会有清理 cache 和 darvik cache 。刷机时一般还需要擦除 /data 。内部存储(Internal Storage)则可以视情况保留。
刷入系统镜像
- 在 fastboot 模式,可以直接
fastboot flash system <img file>
(不常用) - 或者:在第三方 recovery 中操作。
- 在TWRP 中,可以将镜像放入 sd 卡,或者用 adb push 将镜像转移至内部存储,然后安装。
安装其他组件
在 TWRP 等第三方 recovery 中可以用 adb sideload
来将组件(如 Open GApps )安装至系统。这要求 system 分区必须可读写。麻烦的是安卓10以后的一些 rom 不能再将 system 分区 remount 为 rw ,下载 rom 前可以仔细看看有没有针对此问题的不同的 variant。
关于 Rom 的选择
由于华为官方过于封闭,华为系列的设备不被几乎所有社区支持。这种情况下能选择的 rom 就少之又少。官方有针对荣耀10优化过的只有 LineageOS ,而且其实是针对荣耀 V10 (Huawei Honor View 10)(据说荣耀10可用),而且这个 rom 文件还从官方的下载仓库删掉了。这种情况下能选择的就只有 treble gsi rom 了。
关于 treble gsi rom
一些链接:什么是 Project Treble ;什么是 gsi rom 。
大致来说就是一种通用设备镜像,可以在绝大多数设备上使用。现有的几乎所有 treble gsi rom 是基于 phhusson 的构建做的。
大多数关于 treble gsi rom 的问题可以在上述 repo 的 wiki 和 issue 中找到。推荐先看完这个。
推荐做一个 overlay 。重要的原因主要是电量管理。不过按照教程得到的没有刘海屏适配,我 自己做了一个放在这里 (提了 PR 现在 merge 进去了)。需要注意的是,安装 apk 时要把一起编译出的所有 apk 全部放进 /system/product/overlay/ 进行替换,不然在一些 rom 上会导致 webview 不可用(没找出原因)。
GMS 与 GSF
很多 rom 一般都是不自带 Google app 的(有一些会有不同的 variant ),有的甚至做了彻底的 degoogle ,你可能安装后发现没有 Google 的 app 乃至没有 Google 框架。如果你离不开 Google 的应用,常见的解决方法有安装 Open GApps 或 microG 。
如果你选择 Open GApps ,切记在装完系统镜像后,进入系统之前,立刻就把 OpenGApps 也装上(见安装其他组件)。
如果选择 microG
,可能需要一些额外措施来支持 Google Play Store 的应用内购买(详见这里:
10 = install Google Play (patched with microG (in-)app-purchase support)
Root
一些 rom 可能自带一个 su 权限管理。如果觉得不好用的话可以考虑:
Magisk
Magisk 是什么详见这里。因为荣耀10没有 ramdisk ,Magisk 只能安装为 recovery 模式。
如果安装的 rom 自带 root ,一般需要先卸载。
- 下载 Magisk 23.0,安装 app 。准备好你目前的 recovery 镜像文件。
- 打开 app,选择安装到 recovery,按照提示 patch 镜像文件。
- 将 patch 过的镜像文件刷入 recovery_ramdisk 分区。
p.s. Magisk 在 recovery 模式下开机有特殊操作。要进入 Magisk 不启用的系统,按照正常开机流程启动。要进入 Magisk 启用的系统,按照正常进入 recovery 模式流程启动。要进入 recovery 模式,没法进入 在荣耀10上没找到方法;也就是说安装过 Magisk 后将不能进入 recovery 模式。
p.p.s. 也有可能装过 Magisk 后正常启动进入的也是 Magisk 启用的系统。如果不想要这种行为,见这里
SafetyNet
关于 root 后如何通过 SafetyNet 可以对着 这个教程 排查一下。但有些配置就是不能通过 SafetyNet (比如安装了 EdXposed , microG 等),不可强求。
杂项
一些杂七杂八的注意事项:
- 安装完 TWRP 后卡在 TWRP 的启动页面进不去,一般是你没有清理 cache 。
- 装完系统卡在启动 logo 或者 boot loop,一般也是你没有清理 cache 。
- 用
adb sideload
时提示空间不足,一般其实空间是足的。这是因为刷入系统镜像后, system 分区只分配了镜像所需要的空间。可以在 TWRP 中用 resize 功能调整 system 分区的大小。如果依然空间不足那就真的不足了。可以考虑换比较小的 rom 或者卸载系统 app 等等。(不建议在分区上做手脚) - 如果 rom 有或者你安装了 gapps,且进入系统后提示 "Device is not Play Protect certified" ,可以在这里按照提示注册设备。
- 如果进入系统后发现内部存储没了,一般是上一个系统对数据加了密或者 /data 分区有损坏。可能的预防和解决措施有
- 刷机前关闭“查找设备”,删除所有锁屏安全措施以关闭数据加密。(不一定有用)
- 刷机前把 /data 包括 Internal Storage 擦除。
- 如果无论如何都恢复不了内置存储,可以用 eRecovery 中的下载并恢复功能重新来过(很慢orz)。
- GSI rom 似乎在荣耀10上都不支持 Vulkan ,用 Vulkan 进行渲染的游戏将会无法正常显示。尝试各种方法无果。