如何编辑/查看 SDK 模拟器中的 system.img 文件

5次阅读
没有评论

问题描述

希望编辑位于 Android-30\google_apis_playstore 目录下的系统镜像文件(system.img),该目录在 sdk/system-images 内。使用 WSL 的 Ubuntu 18.04 环境尝试挂载和修改此 file,但遇到了问题。尝试使用 fdisk -lL system.img 完成分区表分析后,通过指定偏移量进行挂载失败,并且使用 simg2img 创建可编辑的 raw.img 文件也未成功。

解决方案

检查文件类型和内容

在继续尝试任何操作之前,请确保您正在处理正确的文件类型。system.img 通常是一个 Android 系统镜像文件,用于存储设备上的系统文件。它可能以某种特殊的格式打包,并不直接适用于 fdisk 或其他通用磁盘管理工具。

使用 kpartx 解压 image 文件

可以尝试使用 kpartx 工具来解压缩 system.img 文件:

  1. 首先,确保您已安装 kpartx。对于基于 Debian 的系统(如 Ubuntu),可以通过运行以下命令安装:
    bash
    sudo apt-get install kpartx

  2. 使用以下命令挂载 system.img 并查看其内容:
    bash
    sudo kpartx -av ./system.img

  3. 检查创建的设备节点(类似于 /dev/mapper/loop0p1/dev/mapper/loop0p2)。

  4. 使用如下命令挂载镜像中特定的部分:
    bash
    sudo mount /dev/mapper/loop0pX /mnt/mountpoint # 其中 X 是 1 或者 2, 根据分区表

  5. 编辑文件(使用适当的文本编辑工具,例如 nano)、修改完毕后需要更新文件系统:
    bash
    sudo umount /mnt/mountpoint # 需要先卸载分区
    sudo kpartx -dv ./system.img # 移除映射表

使用 android-tools-fsutils 工具包

如果 kpartx 不适用或者需要修改 system.img,可以考虑使用 android-tools-fsutils

  1. 安装此工具包:
    bash
    sudo apt-get install android-tools-fsutils

  2. 先尝试将 system.img 转换为一个普通(非分层)文件:
    bash
    simg2img /path/to/system.img raw.img # 重新生成的镜像将以普通格式保存在 raw.img 中。

  3. 备份原始 image 文件,以防后续出现问题。

  4. 使用标准文件系统工具编辑 raw.img:
    bash
    sudo mkdir -p /mnt/sdb1 # 创建一个目标挂载点(假设分区表中有一个为 sdb1)
    sudo mount raw.img /mnt/sdb1 # 尝试使用标准的文件系统方法挂接镜像

  5. 编辑文件并更新文件系统(如果需要):
    bash
    sudo umount /mnt/sdb1
    sudo mkfs -t ext4 /path/to/your/image.raw # 用于验证和恢复错误,或者直接跳过这一步。
    sudo mount /path/to/your/image.raw /mnt/sdb1

请注意:在上述步骤中编辑系统 image 可能会触发设备上的安全或功能相关问题。请确保您充分理解这些操作的含义,并采取适当的安全措施。

最终清理与处理

在整个过程中,定期备份原始 system.img 文件,以保证在出现问题时能够还原到一个已知的良好状态。

通过上述步骤应可以更好地理解和管理 Android 系统镜像文件。请注意实际使用时需根据具体的文件内容和设备进行适配调整。

正文完