打包与解包安卓 img 镜像

今天偶尔看到有人问起,如何解包打包安卓的各类 img 文件。下面介绍下

首先可以去 https://android.googlesource.com/platform/system/extras 下载工具源代码

$ git clone https://android.googlesource.com/platform/system/extras /your/path

checkout 你需要的版本,譬如 android-5.1.1_r13

$ cd /your/path/extras
$ git checkout android-5.1.1_r13

编译 simg2img,这里你需要 gcc 工具,linux 用户基本都由现成的

$ cd /your/path/extras/ext4_utils
$ gcc -o simg2img -lz sparse_crc32.c simg2img.c
$ gcc -o make_ext4fs -lz make_ext4fs_main.c make_ext4fs.c ext4fixup.c ext4_utils.c allocate.c backed_block.c output_file.c contents.c extent.c indirect.c uuid.c sha1.c sparse_crc32.c wipe.c

当前目录会生成 simg2img 与 make_ext4fs 两进制文件

下面解包开始,以 system.img 为例

$ ./simg2img system.img system.ext4

随后,可以直接挂载,需要 root 权限

# mkdir /your/path/system-data
# mount -t ext4 -o loop system.ext4 /your/path/system-data

打包的话,则是如此操作

$ ./make_ext4fs -s -l 512M -a system system-data.img /your/path/system-data

或者使用源代码中的脚本

$ cd /your/path/extras
$ PATH="$PATH:$(pwd)/ext4_utils/make_ext4fs" ./ext4_utils/mkuserimg.sh -s /your/path/system-data system-data.img ext4 /tmp 512M

最后转换下

$ ./simg2img system-data.img system.img

OK,你可以刷入你的手机了,Good luck!