解包和打包system.img
直接挂载mountsystem.img/mnt/rom
修改后打包 file_contexts放在当前目录 即打包的img所在目录make_ext4fs-S./file_contexts-l1610612736-s-asystemsystem_out.img/mnt/rom
-l时按指定长度 1610612736既是指定长度
通过下面这命令查看大小 会显示xxx bytsfdisk-lsystem.img
打包后还不是Ext4用以下工具和命令./simg2imgsystem_out.imgsystem_new.img
用以下命令可以查看是否为img格式是否为ext4 和原img比对类型filesystem_new.img
解压和打包安卓DAT文件
首先把DAT解压成IMG镜像,我们要使用sdat2img工具把 DAT文件转换成IMG镜像./sdat2img-=input,system.transfer.listfromromzip-=input,system.new.datfromromzip-=outputext4rawimagefile
一个很简单的例子(看你用的啥):./sdat2imgsystem.transfer.listsystem.new.datsystem.img
or./sdat2img.pysystem.transfer.listsystem.new.datsystem.img
新生成的IMG镜像便是我们下一步需要的.
挂载IMG镜像sudomount-text4-oloopsystem.img/mnt/rom
orsudomountsystem.img/mnt/rom
这时候你可以在系统的 /mnt/rom目录下看到文件的具体内容然后进行修改了.
打包回IMG镜像-把修改好的内容打包回去需要使用make_ext4工具./make_ext4fs-S./file_contexts-l1610612736-s-asystemsystem_out.img/mnt/rom
-l时按指定长度 1610612736既是指定长度 通过下面这命令查看大小 会显示xxx bytsfdisk-lsystem.img
打包后还不是Ext4用以下工具和命令./simg2imgsystem_out.imgsystem_new.img
用以下命令可以查看是否为img格式是否为ext4 和原img比对类型filesystem_new.img
封装成DAT仍需要使用工具 使用 rimg2sdat (在安卓7.0,很可能会出现段存储错误)./rimg2sdat
例:./rimg2sdatsystem_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
参考:
工具:
安卓7.0file_contexts提取
先安装工具包:sudoaptinstallabootimg
解包:abootimg-xboot.img
得三个文件,其中有一个initrd.img,使用file命令查看为gzipfileinitrd.imginitrd.img:gzipcompresseddata,fromUnix
解压后得file_contexts.bincat./initrd.img|gunzip|cpio-vid
Android 7.0 file_contexts.bin和file_contexts转换工具
1、file_contexts.bin 转换成 file_contexts,命令如下:./sefcontext-ofile_contextsfile_contexts.binsefcontext
2、file_contexts 转换成 file_contexts.bin,命令如下:./sefcontext_compile-ofile_contexts.binfile_contexts
安卓7.0新版打包dat方式 使用rimg2sdat.py(这个工具使用的输入文件是sparse ext4fs image镜像)
由system目录制作raw ext4fs镜像system.rimg./make_ext4fs-T0-S./file_contexts-l265920-asystemsystem.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的文件,所以需要转化img2simgsystem.rimgsysparse.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会不一样../img2sdat.pysysparse.rimg./4
这样,会在当前目录下生成2个文件:system.new.dat system.transfer.list。自己再创建一个空的system.patch.dat即可。
最近筹备的一些东西和遇到的问题。
最近有部分rom开发者将rom打包成了一种特殊的格式,实质肯定是ext的img,但是无法挂载,也没有多余的分区,更无法转化,正在寻找解决办法
同时也准备开发一个rom推广的精简工具,以后我会更倾向于直接刷完三方再一键精简。不太想折腾包了,打包解包太慢,测试时间也长,使用app,会更0基础更方便一些。
测试环境:
ubuntu 16.04 64bit
各种问题解决来自:
以下包中有一个img2simg工具没有,Ubuntu下可以直接安装工具包sudoaptinstallandroid-tools-fsutils
已测试的所有最新的工具 linux使用自行百度学习