# 准备工作

# 手机选择

如果是为了刷原生而买手机,买一加,或者小米吧。这两个适配的很快(还是用户群体比较给力),一加 8T 在发布后一个半月后就有了官方 Pixel Experience,而一年前的小米 10 现在还只有 Unofficial PE。

一定要买膏通削龙的 SoC,联发科和麒麟目前暂时别想用原生了。

# ROM 选择

有条件还是搞个梯子,不然 ROM 很难下的。

# Recovery 选择

无脑选 TWRP (opens new window)

# Root 选择

Magisk (opens new window)

Magisk v22 起,搞了一个 MAGIC™🌈 操作,把 Manager 和 zip 包集成到一个 apk 里了,卡刷前把 apk 改为 zip 即可刷入。

推荐 Magisk 模块:

# Xposed 选择

现在 LSPosed 还不错,能只对指定应用生效,还可以不重启。

推荐 Xposed 模块:

# 数据备份

敢玩原生的,应该对重要数据应该一直都有数据备份吧。

需要备份的:

  • 联系人~~(使用 Migrate (opens new window),或者手动导出为 vcf)~~直接把联系人存到 Google 账户就能无感同步了
  • 图片视频(安利 Syncthing,可以自动和电脑双向同步文件夹,并且可以 p2p 内网穿透)
  • 200 个 apps(使用 Migrate (opens new window) 或者钛备份专业版备份 apk + 数据,不过需要旧手机拿到 root;备份前推荐清理一下缓存,减少备份大小) 懒得折腾备份 apps 和数据了,大部分 apps 需要的时候下载,平时使用 apps 时也倾向于支持数据云同步的,就不用担心突然有一天手机暴毙数据全丢了
  • Authenticator 的 2FA。Google Authenticator 支持以二维码的形式导出,就不需要重置了。如果不支持导出,重置策略依 app 不同,有些只需要密码,有些需要 Recovery Codes(当然,最好在第一次扫码的时候把二维码和 Recovery Codes 保存在一起,系统更新以后再对着二维码扫一遍就能接着用了)
  • xykey(密码本子,无联网权限,只能导出文件进行备份,图个安全)
  • Nova Launcher 的布局(导出一个 .novabackup) 换系统以后一样的桌面布局反而没有新鲜感,重新铺一遍吧
  • WiFi 密码,后面会细说。当然不备份也是可以的。现在我就是懒得备份了

# A/B 分区查询、修改

如果手机是 A/B 分区,刷到不同的系统时(如从 MIUI 刷到类原生),两个 Slot 都需要刷。当然,也要格式化 data 分区。

adb 下只能查询当前 Active Slot。

adb shell getprop ro.boot.slot_suffix

fastboot 下可以查询/修改当前 Active Slot。Docs (opens new window)

fastboot getvar current-slot
fastboot set_active b

# 开干!

# adb 安装

用 Chocolatey 蛮方便的。安利我的这篇博客:使用 Chocolatey 配置 Windows

choco install adb

# 驱动安装

如果不安装驱动,adb 或 fastboot 可能识别不到手机。注意 adb 和 fastboot 的驱动是两种驱动,adb 能工作不代表 fastboot 能工作。

驱动下载:安装原始设备制造商 (OEM) USB 驱动程序 | Android 开发者 | Android Developers (opens new window) 最下面有各个厂商的驱动。

# adb fastboot 命令

进入 fastboot 状态后

fastboot devices
fastboot flash recovery <twrp.img>
fastboot reboot

我的小米 Mix 2s 一刷就报错,换电脑换线都没用,很奇怪。后来发现一个解决方法:

  1. 手机进入 fastboot 不连接电脑
  2. 电脑 fastboot flash recovery twrp.img,卡在 <waiting for any devices>
  3. 手机连接电脑,连接以后就会自动刷入,不会报错

# 进入 recovery

图形界面,比较好操作,但是由于系统等原因可能还是会比较复杂。可能会有以下一些操作:

  • 格式化 /data:如果原分区有加密,twrp 显示无法挂载 /data,就需要格式化 /data(注意,这不等于清除 /data)。
  • Pixel Experience 等类原生会对 /data 加密,密码为开机密码。在 TWRP 3.5 以上输入密码即可解密,而 TWRP 3.4 是不支持解密的,故尽量使用 3.5 以上的 TWRP

# 用 adb 批量安装 apps

200+ 个 apk 安装起来可不是说着玩的。由于 apk 全部备份在电脑,可以直接走 adb 安装:

cmd 方法:

:: 在 App 同目录下执行
adb devices
for /f "delims=" %i in ('dir /b /a-d /s .') do adb install "%%~nxi"

shell 方法:

# 在 App 同目录下执行
adb devices
for f in *; do adb install "$f"; done

注意 Android 的 Termux 也是 shell,所以可以在旧手机的 Termux 上安装 android-tools 后,通过 adb 网络连接到新手机,然后跑命令;甚至把安装包下载到用新手机可以 adb connect localhost

# Wifi 密码备份、恢复

这里只讨论通过 config 文件对 Wifi 密码进行备份、恢复。Google 账户似乎有同步功能,但我的没法用。

Wifi 密码的存储路径,几个安卓版本都稍有区别。据不完全统计,Android 不同版本的 Wifi 存储路径如下表。

Android 版本 存储路径
Android 7.1 (N) /data/misc/wifi/wpa_supplicant.conf
Android 9 (P) /data/misc/wifi/WifiConfigStore.xml
Android 11 (R) /data/misc/apexdata/com.android.wifi/WifiConfiStore.xml

不同系统还可能有差别,具体以你的系统为准。

其中 wpa_supplicant.confWifiConfigStore.xml 需要转换,可参考万能的 GitHub (opens new window)

密码的备份无非就是把文件复制出来,而恢复就会稍微麻烦一点了,如果直接覆盖后重启,会发现文件又被改回去了。

万能的 GitHub (opens new window) 也给出了方案,以下是中文描述:

  1. 关闭 Wifi
  2. WifiConfigStore.xml 复制并覆盖对应文件
  3. 修改 WifiConfigStore.xml 的权限为 600,owner 为 system:system
  4. 删除 /data/misc/wifi/WifiConfigStore.xml.encrypted-checksum(我的 Android 11 并没有这个文件,于是跳过)
  5. 重启,重启后可以看到连过的 Wifi 都回来啦
  6. 开启 Wifi

# 原生管理

原生确实流畅,不过上了原生就得自己控制国内 app 自启了。常用工具有:

  • 冰箱(需 root 或 adb,免费版只能冻结 5 个 app,可以用小黑屋代替)
  • 黑阈(每次开机需要连电脑 adb,也可以用 root 替代 adb)
  • 绿色守护(需 root 或 adb)

12G 内存用原生平时没见杀过内存的,也懒得折腾了。不过耗电有点厉害,可能和没管理也有关系随身带充电宝就行

# 国内 OS 工具的替代