解包和打包system.img
直接挂载
mount system.img /mnt/rom
修改后打包 file_contexts放在当前目录 即打包的img所在目录
make_ext4fs -S ./file_contexts -l 1610612736 -s -a system system_out.img /mnt/rom
-l时按指定长度 1610612736既是指定长度
通过下面这命令查看大小 会显示xxx byts
fdisk -l system.img
打包后还不是Ext4用以下工具和命令
./simg2img system_out.img system_new.img
用以下命令可以查看是否为img格式是否为ext4 和原img比对类型
file system_new.img
解压和打包安卓DAT文件
首先把DAT解压成IMG镜像,我们要使用sdat2img工具把 DAT文件转换成IMG镜像
./sdat2img <transfer_list> <system_new_file> <system_ext4> - <transfer_list> = input, system.transfer.list from rom zip - <system_new_file> = input, system.new.dat from rom zip - <system_ext4> = output ext4 raw image file
一个很简单的例子(看你用的啥):
./sdat2img system.transfer.list system.new.dat system.img
or
./sdat2img.py system.transfer.list system.new.dat system.img
新生成的IMG镜像便是我们下一步需要的.
挂载IMG镜像
sudo mount -t ext4 -o loop system.img /mnt/rom
or
sudo mount system.img /mnt/rom
这时候你可以在系统的 /mnt/rom目录下看到文件的具体内容然后进行修改了.
打包回IMG镜像-把修改好的内容打包回去需要使用make_ext4工具
./make_ext4fs -S ./file_contexts -l 1610612736 -s -a system system_out.img /mnt/rom
-l时按指定长度 1610612736既是指定长度 通过下面这命令查看大小 会显示xxx byts
fdisk -l system.img
打包后还不是Ext4用以下工具和命令
./simg2img system_out.img system_new.img
用以下命令可以查看是否为img格式是否为ext4 和原img比对类型
file system_new.img
封装成DAT仍需要使用工具 使用 rimg2sdat (在安卓7.0,很可能会出现段存储错误)
./rimg2sdat <system_img>
例:
./rimg2sdat system_new.img
这样就打包好了新的DAT文件,放入刷机ROM.刷机即可~
file_contexts提取
解压rom得到boot.img 有的是BOOT.img
使用unpackbootimg工具
./unpackbootimg -i .\BOOT.img
解压后得到BOOT.img-ramdisk和其他一堆文件
只用找到BOOT.img-ramdisk,这是一个gzip的压缩包
直接解压即可得到file_contexts
参考:
http://blog.csdn.net/wh_19910525/article/details/8200372
工具:
https://github.com/osm0sis/mkbootimg
安卓7.0file_contexts提取
先安装工具包:
sudo apt install abootimg
解包:
abootimg -x boot.img
得三个文件,其中有一个initrd.img,使用file命令查看为gzip
file initrd.img initrd.img: gzip compressed data, from Unix
解压后得file_contexts.bin
cat ./initrd.img | gunzip | cpio -vid
Android 7.0 file_contexts.bin和file_contexts转换工具
1、file_contexts.bin 转换成 file_contexts,命令如下:
./sefcontext -o file_contexts file_contexts.bin sefcontext
2、file_contexts 转换成 file_contexts.bin,命令如下:
./sefcontext_compile -o file_contexts.bin file_contexts
安卓7.0新版打包dat方式 使用rimg2sdat.py(这个工具使用的输入文件是sparse ext4fs image镜像)
由system目录制作raw ext4fs镜像system.rimg
./make_ext4fs -T 0 -S ./file_contexts -l 2013265920 -a system system.rimg /mnt/rom
简单解释一下,
-T代表对镜像中的unix文件时间戳进行设置,这里设置为0,表示1970-1-1。
-S 代表file_contexts,即selinux的文件selabel,必须指定;注意是大写S。
-l 表示文件分区的length,也是制作出来的镜像文件的大小;这里n5指定为1G。
-a 表示android中分区的名字,这里表示system分区;
/mnt/rom表示制作源目录。也就是你解包后挂载的那个目录
通过上面的步骤,得到一个2GB的文件system.rimg。这是一个ext4的文件,所以需要转化
img2simg system.rimg sysparse.rimg
有人会说为什么不直接用-s生成sparse文件,
原因是:这两个文件是不一样的,至于为什么,我也不知道,可能工具有问题,没细究
第一个直接生成的:
file system_out.img
system_out.img: Android sparse image, version: 1.0, Total of 491520 4096-byte output blocks in 4854 input chunks.
第二个是生成的ext4再转化后的:
file sysparse.rimg
sys.rimg: Android sparse image, version: 1.0, Total of 491520 4096-byte output blocks in 10396 input chunks.
会发现 这两个的blocks会不一样.
最后使用rimg2sdat.py github地址:https://github.com/xpirt/img2sdat :
./img2sdat.py sysparse.rimg ./ 4
这样,会在当前目录下生成2个文件:system.new.dat system.transfer.list。自己再创建一个空的system.patch.dat即可。
最近筹备的一些东西和遇到的问题。
最近有部分rom开发者将rom打包成了一种特殊的格式,实质肯定是ext的img,但是无法挂载,也没有多余的分区,更无法转化,正在寻找解决办法
同时也准备开发一个rom推广的精简工具,以后我会更倾向于直接刷完三方再一键精简。不太想折腾包了,打包解包太慢,测试时间也长,使用app,会更0基础更方便一些。
测试环境:
ubuntu 16.04 64bit
各种问题解决来自:
Android5.0以上使用raw ext4fs image制作system.new.dat
Android 5.0 system.new.dat解包工具及方法
以下包中有一个img2simg工具没有,Ubuntu下可以直接安装工具包
sudo apt install android-tools-fsutils
已测试的所有最新的工具 linux使用自行百度学习
本站由以下主机服务商提供服务支持:
0条评论