安卓刷机笔记 | 华为荣耀10

以下内容针对安卓华为荣耀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 命令刷入镜像。步骤:

  1. 将系统降级至 emui 9。可以在华为手机助手的“升级系统”功能里选择“其他版本”找到旧版本。如果没有 emui 9的选项,需要下载旧版华为手机助手。
  2. 关闭“查找我的手机”,退出华为账号。
  3. 获得解锁码 。华为官方关闭了这个申请通道
  4. 用解锁码解锁 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 GAppsmicroG

如果你选择 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 ,一般需要先卸载。

  1. 下载 Magisk 23.0,安装 app 。准备好你目前的 recovery 镜像文件。
  2. 打开 app,选择安装到 recovery,按照提示 patch 镜像文件。
  3. 将 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 进行渲染的游戏将会无法正常显示。尝试各种方法无果。