Skip to content

Instantly share code, notes, and snippets.

@Seshiria
Last active November 2, 2025 16:01
Show Gist options
  • Select an option

  • Save Seshiria/beab57d469650417dd4d9eff8c772642 to your computer and use it in GitHub Desktop.

Select an option

Save Seshiria/beab57d469650417dd4d9eff8c772642 to your computer and use it in GitHub Desktop.
android system解包打包流程

android system解包打包流程

经过测试可用于Android 11 (lineageOS18.1)

依赖

Release Brotli v1.0.4 · google/brotli · GitHub

sdat2img/sdat2img.py at master · xpirt/sdat2img · GitHub

GitHub - xpirt/img2sdat: Convert sparse EXT4 image to sparse Android data image

img2sdat/img2sdat.py at master · xpirt/img2sdat · GitHub

参考文档

[DEV] sdat2img 1.1 - img2sdat 1.7 ◦ Unpack/re-pack android DAT files | XDA Forums

解包

请先解压出刷机包里面system.new.dat.br system.transfer.list备用

下面用的是shell的命令行示例,如果是windows的请自行转换

#用Brotli解压system.new.dat.br为system.new.dat
brotli --decompress system.new.dat.br --output=system.new.dat
#转换system.new.dat为system.img
./sdat2img.py system.transfer.list system.new.dat system.img
#经过转换的system.img已经是Linux识别的ext4分区文件,可以直接挂载
mkdir output
sudo mount -t ext4 -o loop system.img output

接下来可以随意编辑output下的文件,对应的就是system.img里面的文件

恢复文件selinux上下文

经过编辑的文件请务必要确定对应的selinux上下文、及文件权限是不是正确的,否则刷机后无法访问或者无法开机

#利用正常selinux的文件恢复上下文
chcon --reference=(正常文件名) (修改过的文件名)

打包

#移除旧文件,也可以复制到别的位置
rm -f system.new.dat.br system.new.dat system.transfer.list
#解除挂载
umount output
#转换镜像为稀疏文件
./img2simg system.img system_2.img
#转换为dat文件
./img2sdat.py -o system_2.img -v 4 -o output
#压缩dat文件
cd output
brotli  --quality=6 system.new.dat --output=system.new.dat.br
#现在output目录已经有四个文件了
#把下面三个文件直接替换刷机包内对应的文件
# system.new.dat.br 
# system.patch.dat
# system.transfer.list
@Seshiria
Copy link
Author

Seshiria commented Sep 4, 2025

brotli 格式不太对,似乎是这样用?

brotli.exe -d system.new.dat.br -o system.new.dat
python sdat2img.py system.transfer.list system.new.dat system.img

当时凭回忆写的内容。brotli 命令行是错误的,按具体的命令行参数列表修改了一下。
python是windows和linux命令行风格不一样,当时用的是linux。

@hhyygg2009
Copy link

brotli 格式不太对,似乎是这样用?

brotli.exe -d system.new.dat.br -o system.new.dat
python sdat2img.py system.transfer.list system.new.dat system.img

当时凭回忆写的内容。brotli 命令行是错误的,按具体的命令行参数列表修改了一下。 python是windows和linux命令行风格不一样,当时用的是linux。

感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment