19

在 AVD 模拟器上安装 Magisk (Android 11)

 2 years ago
source link: https://nekoquq.github.io/posts/0007.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在 AVD 模拟器上安装 Magisk (Android 11)

在 AVD 模拟器上安装 Magisk (Android 11)
2021-06-16 / 猫村 あおい 🍭

折腾一下喵。
本文基于 Magisk 版本 v23.0

打开模拟器镜像目录找到 ramdisk.img 这就是要 patch 的东西,一看是个 gzip ,解压后是个 cpio archive

按照刷机的记忆,定位 patch ramdisk 的脚本位置。

https://github.com/topjohnwu/Magisk/blob/66cc9bc545585c5d6e5833fdb55964c9b0385f43/scripts/boot_patch.sh#L142

那就按照脚本来干喵~

./magiskboot compress=xz magisk32 magisk32.xz
./magiskboot compress=xz magisk64 magisk64.xz

KEEPVERITY=false
RECOVERYMODE=false
KEEPFORCEENCRYPT=true
export KEEPVERITY
export KEEPFORCEENCRYPT

echo "KEEPVERITY=$KEEPVERITY" > config
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
echo "RECOVERYMODE=$RECOVERYMODE" >> config

./magiskboot cpio ramdisk.cpio \
"add 0750 init magiskinit" \
"mkdir 0750 overlay.d" \
"mkdir 0750 overlay.d/sbin" \
"add 0644 overlay.d/sbin/magisk32.xz magisk32.xz" \
"add 0644 overlay.d/sbin/magisk64.xz magisk64.xz" \
"patch" \
"backup ramdisk.cpio.orig" \
"mkdir 000 .backup" \
"add 000 .backup/.magisk config"

./libbusybox.so gzip ramdisk.cpio
mv ramdisk.cpio.gz ramdisk.img

大功告成?我记得在 Android 11 以前这样干没问题。

然而到了 Android 11 就不能启动了,赶紧抓个 log

sticker003.webp

喵喵喵怎么 ramdisk 少了一堆玩意,,,

手动解包才发现这个 cpio 是两个 cpio 文件合并的。 屑 Google 又在搞什么喵喵?

magiskboot 不支持完整读取,而且又不报错,坏喵。

不关事的链接喵

修复 cpio 文件

思路是分别解包再打包。

cpio 文件的结尾为固定 magic TRAILER!!!

所以用二进制编辑器搜索,发现两个 magic ,说明这个文件为两个 cpio 连接而成。

记录下第二个 cpio 的偏移,如 2159360

mkdir patch-cpio
cd patch-cpio

dd if=ramdisk.cpio of=ramdisk.1 bs=1 count=2159360
dd if=ramdisk.cpio of=ramdisk.2 bs=1 skip=2159360

解包,打包(涉及到文件权限这段要用 root 运行喵)

mkdir unpack
cd unpack

../../libbusybox.so cpio -i < ../ramdisk.1
../../libbusybox.so cpio -i < ../ramdisk.2

find . | ../../libbusybox.so cpio -H newc -o > ../ramdisk.cpio.fixed

修复 backup init

于是拿这个 .fixed 去 magiskboot patch 就好了?然而还是开不了机。。。

sticker004.webp

看 log 发现是缺少 /.backup/init

这个文件就是原来 init 的备份,一般 magiskboot patch 都会自动备份但是这次没有。

那就手动加上喵。

加上这句:
"add 0750 .backup/init init" \

然后就能开机了喵。

  1. 抓 kernel log
cd sdk/emulator
LD_LIBRARY_PATH=$PWD/lib64:$PWD/lib64/qt/lib ./qemu/linux-x86_64/qemu-system-x86_64 -avd 喵 -show-kernel
  1. 不要使用 GNU 的 cpio gzip 等工具,必须用 magisk 带的 busybox 才能保证格式正确。

sticker005.webp

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。
本文链接:
https://nekoquq.github.io/posts/0007.html

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK