救助:修改系统文件

我手上使用的是edge s,已解bootloader,用过很多系统,欧版官方系统,los类的第三方系统,最近回归到国行系统。其实我对国行也不怎么排斥,之前之所以不用国行,最主要是开启不了google位置记录。前几天研究了一下,发现是系统文件夹里有一个文件在作怪,具体是/system/product/etc/permissions/services.cn.google.xml,这个文件里有这么一个值,把这句删了就可以了。我用magisk root了,用了root explorer,发现system文件夹挂载不了r/w,网上搜索了下,发现原因是android 12的系统是super分区,天生不能挂载r/w。有说用twrp recovery挂载后push进去的,有说也不行的,还没试过,因为手机上现在有很多数据,怕丢了。
请大佬们帮忙,有可行的办法,把这个文件修改了。
另,修改这个文件可以实现国行rom开启location history,也是从一个magisk module上找到的,现在我也是在用这个module来实现这个功能,但我平时要玩ingress这个游戏,手机不能被root,安装了magisk后还要隐藏root,一方面麻烦,另一方面怕被ban了。毕竟我只需要开启位置记录,其他magisk的功能都不需要。
国行rom开启location history的magisk module:

采用了 super 动态分区的设备,不像你想象的那么简单。你没办法很容易的像老设备那样直接修改。我不确定我下面回复的你是否能看懂。如果你看不懂的话,那么你可能需要 Google 相关的知识或者直接放弃。

对于你的设备:

你需要将当前系统版本的 super 中,提取 product_a.img 镜像出来,在 WSL 或者其它任何类 Unix 发行版本系统上,ROOT 根用户下,随便创建一个文件夹,然后挂载 mkdir -p prod; mount product_a.img prod

挂载以后,dumpe2fs product_a.img 检查一下镜像特性,有没有 shared_blocks 共享块字样。如果没采用共享块,并且由于是小文件,所以不需要 resize2fs 重新分配分区大小,直接操作下一步。如果采用了共享块,则需要先将分区使用 resize2fs product_a.img 5G 命令调大(计算当前 product 镜像大小,调整到比当前镜像大 1-2GB 就可以,5G 意思就是直接把 product 调整为 5GB 大小),然后使用 e2fsck -y -E unshare_blocks product_a.img 命令将共享块移除(有共享块的时候没办法将分区挂载为读写)。

调好以后,使用 cp 命令,替换文件。

最后,umount product_a.img 解除挂载分区。然后使用 e2fsck -yf prodcut_a.img 修正因替换文件导致的文件系统错误。最后,resize2fs -M product_a.img 将 product 分区调整到最小(如果没采用共享块,在上面也没 resize2fs 调整过大小,这里也不需要调整为最小)。修改完毕。

fastboot reboot fastboot 重启进入 fastbootD 模式(注意不是 AP Fastboot 模式),将改好的 product 镜像刷入进去。fastboot flash product_a product_a.img

最后,重启进入 fastboot 模式,使用如下命令,禁用 vbmeta 验证(不禁用不开机),vbmeta 镜像从你当前系统版本的完整官方固件中提取:

fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img

对于新的出厂 Android 12+ 以上用户回复:

由于在新的 Android 12+ 以上设备,为了减小操作系统的空间占用,分区格式已经是 erofs 格式(这个格式是原菊花牌的一个员工贡献的),不是 ext4,这个格式你可以理解为一个 ZIP 压缩包(ZIP 压缩包肯定没办法改成读写吧哈哈,你往 ZIP 里添加或者删除文件实际上也是重打包过程)。你没办法在不重新打包 super 下相应的分区的情况下,将只读的文件系统改为可读写。

要重新打包 erofs 分区,原理是先将 erofs 转换为 ext4,然后再将 ext4 重新压缩回 erofs。

谢谢大佬解答,基本理解了,就是要修改系统分区镜像,然后再刷入,过几天抽空试下再来汇报结果。