如何正确修改Android x86的system.img?

4
我尝试修改Android模拟器的system.img文件,以便从修改后的system.img启动Android模拟器。我尝试使用https://github.com/anestisb/android-simg2img的方法,但出现错误“Invalid sparse file format at header magi”。确切的文件路径是“Android/Sdk/system-images/android-26/google_apis/x86/system.img”,这是从sdkmanager下载的官方Google img文件。请注意保留HTML标签。
$ file /home/user/Android/Sdk/system-images/android-26/google_apis/x86/system.img 
./system.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x146,155,21), startsector 1, 5246975 sectors, extended partition table (last)
$ fdisk -lu /home/user/Android/Sdk/system-images/android-26/google_apis/x86/system.img 

Disk /home/user/Android/Sdk/system-images/android-26/google_apis/x86/system.img: 2.5 GiB, 2686451712 bytes, 5246976 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9C0C82F8-6E6F-46F9-AFC8-A09D908DAB24

Device                     Start     End Sectors  Size Type
/home/huya/tmp/system.img1  2048 5244927 5242880  2.5G Linux filesystem

如何将一些文件添加到.img文件中并从中启动模拟器? 基本上我想运行一个自定义的模拟器,其中一些文件被修改了,欢迎使用其他方法。
1个回答

2

从您的命令输出中可以看出,Android模拟器镜像不再是稀疏镜像,而是包含单个分区的完整磁盘镜像。

您可以通过直接通过回环设备挂载它来简单地修改该单个分区的内容:

mount -o loop,offset=1048576 system.img /mnt

可以使用parted找到分区的偏移量:

parted system.img unit B print

1048576字节似乎是所有官方映像的偏移量。

然后,您可以在/mnt下编辑文件系统的内容,并在完成后只需umount /mnt。 记得在编辑图像之前备份要编辑的图像。


更安全的方法

或者,可以通过启动带有-writable-system选项的Android模拟器后,通过ADB(Android Debug Bridge)修改系统和供应商映像的内容,这种方法可能更加安全和整洁:

emulator -avd myavd -writable-system

然后运行:

adb root && adb remount

这将以root权限运行ADB并将所有分区重新挂载为读写模式。然后你可以进入 adb shell 进行编辑,或使用 adb push 将文件复制到设备中。

您的修改将保存在 QEMU QCOW 映像 (system.img.qcow2, vendor.img.qcow2) 中,存储在 AVD 目录下 (例如: ~/.android/avd/myavd.avd)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接