linux 如何正确修改android x86 system.img?

eimct9ow  于 2023-06-05  发布在  Linux
关注(0)|答案(1)|浏览(207)

我试图修改Android模拟器系统.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。

$ 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文件并从它启动模拟器?基本上我想运行一个自定义的模拟器与一些文件修改,任何其他方法都欢迎。

fiei3ece

fiei3ece1#

从命令输出中可以看出,Android Emulator映像不再是稀疏映像,而是包含单个分区的完整磁盘映像。
您可以修改单个分区的内容,只需通过环回设备直接挂载它:

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

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

parted system.img unit B print

1048576字节似乎是所有官方图像的偏移量。
然后,您可以在/mnt下编辑文件系统的内容,完成后只编辑umount /mnt。请记住事先备份您正在编辑的图像。

更安全的方法

或者,可以说更安全和整洁,您可以在使用-writable-system选项启动Android Emulator后通过ADB(Android Debug Bridge)修改系统和供应商映像的内容:

emulator -avd myavd -writable-system

然后运行:

adb root && adb remount

它将以root权限运行ADB并以读写方式重新装载所有分区。然后,您可以下拉到adb shell进行随意编辑,或者使用adb push将文件复制到设备上。
您的修改将保存在您的AVD目录下的QEMU QCOW映像(system.img.qcow2vendor.img.qcow2)中(例如:~/.android/avd/myavd.avd)。

相关问题