在 iPlay40 Pro 上安装 LineageOS + Magisk
May 25, 2023 · 8 min read
建议 Tips
您正在查看印刷版本的博客, 印刷版本的博客可能会缺少部分交互功能, 部分内容显示不全或过时. 如果您在查看该印刷版博客时遇到了任何问题, 欢迎来此链接查看在线版: https://www.kxxt.dev/blog/lineageos-and-magisk-on-iplay40pro/
You are viewing a printed version of this blog. It may lack some interactive features and some content might now be fully displayed or outdated. If you encounter any problems while viewing this printed version of the blog, feel free to view the online version here: https://www.kxxt.dev/blog/lineageos-and-magisk-on-iplay40pro/
在踩了很多坑之后,我终于在 iPlay40 Pro 上用上了 Lineage OS + Magisk. 于是我写下了这篇博客作为记录,同时也希望会对别人有所帮助。
Danger
Root/刷机有风险,继续阅读即表示你了解 Root/刷机造成的风险,且本人不对你的行为承担任何责任.
以下教程中你的数据将会被多次擦除,所以请务必提前备份好你的数据。
首先,我们需要解锁 bootloader, 然后让 Magisk 跑起来。请读者先完成我之前的 Alldocube iPlay40 Pro Root 教程 | kxxt 这一博客中的内容,让 Magisk 跑起来。
坑
从 Treble Info App 中我们能看出 iPlay40 Pro 支持 GSI (通用系统镜像),
但是,直接刷写 system
分区肯定是不行的, 这会导致 AVB 校验过不去。另外众所周知,紫光展锐的机子没办法用一个 blank vbmeta 把 AVB 这套东西给禁用掉, 也不能 --disable-verity
。那么,很自然的想法是我们自己给 system.img
签名并且相应的编辑 vbmeta.img
和 vbmeta_system.img
. 去年我就卡在这里了, 没搞明白怎么签这一大堆签名(我只会给 boot.img
签名,但是 system.img
的格式不一样)。
这个 XDA 贴子给出了一种方法。虽然刷写 vbmeta
时不能 disable-verity
, 但是其实我们只需要对 vbmeta_system
和 vbmeta_product
进行 disable-verity
即可, 这是我之前没有想到的。
那么,假设现在你已经跟随我上面提到的那篇博客, 在国际版固件上把 Magisk 给跑起来了。 接下来我们准备刷机。
GSI 选取
可以在下面这个链接查看 GSI 列表: Generic System Image (GSI) list · phhusson/treble_experimentations Wiki · GitHub
我测试了 AOSP 和 Lineage OS 的镜像。
Android 13 版本的镜像能跑,但是 adb logcat
里会不停的持续输出错误日志, 虽然没有严重到影响用户体验的地步,但是我最终还是决定不用 Android 13 了。
另外蓝牙在部分 Android 13 发行版上不 work,在 Google 的 CI 上下载的 AOSP Android 13 镜像上是 work 的。Phh Treble 的 AOSP/Lineage OS 20 上蓝牙不 work, 估计是他们的蓝牙相关 patch 和 iPlay40 Pro 不太搭。
所以我最终选择了 Lineage OS 19 (Phh Treble, AndyYan’s Build, Android 12).
- 下载地址: Andy Yan’s personal builds // GSI - Browse /lineage-19.x at SourceForge.net
- 对于 iPlay40 Pro, 选择 arm64, b, 另外 vndklite 或者非 vndklite 的镜像都可以.
Tip
vndklite 的系统可以允许你在设备上随意挂载根分区进行读写.
# mount -o remount,rw /
但是注意, 我们采用的系统镜像没有任何剩余的可用空间, 如果你想要在设备上编辑 system
分区(因为 System-as-Root, 即编辑 /
) , 请先对 GSI 镜像进行扩容 (以下命令在 Linux 系统上运行, $image
为你下面要刷写的 system.img
):下面的代码演示了给要刷写的镜像扩容 500MB 空间:
$ dd if=/dev/zero bs=1M count=500 >> $image500+0 records in 500+0 records out 524288000 bytes (524 MB, 500 MiB) copied, 2.10985 s, 248 MB/s$ parted $imageWARNING: You are not superuser. Watch out for permissions. GNU Parted 3.6 Using /path/to/your/imageWelcome to GNU Parted! Type 'help' to view a list of commands. (parted) resizepart 1 End? [3301MB]? Press Enter(parted) ^D
刷写 system
请确保电脑已经使用 adb
连接到设备。然后使用 adb
进入 fastbootd
(不能在 fastboot
下操作,必须在 userspace fastboot 下操作):
adb reboot fastboot
然后,在 fastbootd
模式下刷写 vbmeta_system
和 vbmeta_product
:
这里的 vbmeta_{system,product}.img
即在 pac 文件中提取出来的原始文件,没有做任何改动。
fastboot --disable-verity --disable-verification flash vbmeta_system vbmeta_system.img fastboot --disable-verity --disable-verification flash vbmeta_product vbmeta_product.img
然后,调整一下 product
分区的大小并刷写 system
。这里 system.img
即为你要刷写的 GSI 镜像。
fastboot resize-logical-partition product_a 38000 fastboot flash system system.img
刷写完成之后先不要重启,打开 ResearchTool,加载 pac 固件,取消选中所有文件。
Tip
你也可以直接跳过 Research Tool 这一步骤, 直接从 Fastbootd 的菜单进入 Recovery 来清除用户数据, 这样子就不需要单独的分区扩容步骤了.
然后进行固件下载, 这将会清除用户数据.
然后点击电源键重启系统, 再同时按住电源键+音量下键,直到 Research Tool 开始下载, 然后松开。
在 Research Tool 下载完成后, 我们就可以开机了!
数据分区扩容
在刷写部分 GSI 镜像后,操作系统在第一次启动时就会要求恢复出厂设置,清除 data
.
如果操作系统没有让你这样做,你顺利的进入了系统,那么你会发现可用空间非常小,我们需要手动清楚数据分区吗,对数据分区进行扩容,让它恢复应有的大小。
首先重启到 recovery:
adb reboot recovery
然后按一下电源键+音量上键组合键,打开 recovery 菜单:
使用音量上下键选中 清除数据/恢复出厂设置
, 按电源键确定,再选中 Factory data reset
,按电源键来开始清除数据。
耐心等待数据清楚完毕后, 我们的数据分区就恢复到了应有的大小。然后重启系统即可享受 Lineage OS + Magisk.
安全警告
此 build 设置了 ro.adb.secure=0
, 即任何人都可以使用 adb 调试此设备, 不需要授权, 这十分的不安全. 读者可以通过编辑 /system/build.prop
和 /system/system_ext/etc/build.prop
来阻止其他人在未经授权的情况下通过 adb 调试你的设备.
另外, 本文中给出的 Lineage OS 镜像链接是使用公开的密钥签名的, 存在安全风险。我建议读者自己构建 Lineage OS 的 GSI 并亲自签名来杜绝此风险。
- 关于 GSI 的构建请参考此 GitHub 仓库: GitHub - AndyCGYan/lineage_build_unified: Unified script for building GSI and device-specific LineageOS
- 关于签名: Signing Builds | LineageOS Wiki
- 关于使用公开/泄漏的密钥签名的系统的安全风险: Principles for Secure Software Distribution: Lessons from Leaked Android Platform Signing Keys
Reference
- Cubot Pocket: unlock bootloader and flashing GSI/lineageOS
- How to boot into recovery mode on Unisoc / Spreadtrum (SPD) devices
- 将 Fastboot 移至用户空间 | Android 开源项目 | Android Open Source Project
- Generic System Image (GSI) list · phhusson/treble_experimentations Wiki · GitHub]
- linux - Can I expand the size of a file based disk image? - Super User