之前由于开发一个关于 MIUI 系统界面的 Xposed 插件,为了适配不同的 Rom,需要查看不同 Rom 中的 SystemUI.apk
Android Rom 结构
在 5.0 之前,Android 的系统包(卡刷包)是可以直接解压出来
system目录,从它里面就可以直接提取出 Rom 内部的 Apk 文件。5.0 ~ 8.0 中,Android 的 Rom 包里面有
system.new.dat文件,无法直接解压提取,很明显,我们要的 Rom 就在这里面:1
2
3
4
5
6
7-rwxrwx---+ 1 Tianma None 24618314 1月 1 2009 boot.img
-rwxrwx---+ 1 Tianma None 1734469 1月 1 2009 file_contexts.bin
drwxrwx---+ 1 Tianma None 0 5月 11 17:42 firmware-update
drwxrwx---+ 1 Tianma None 0 5月 11 17:42 META-INF
-rwxrwx---+ 1 Tianma None 3089031168 1月 1 2009 system.new.dat
-rwxrwx---+ 1 Tianma None 0 1月 1 2009 system.patch.dat
-rwxrwx---+ 1 Tianma None 16288 1月 1 2009 system.transfer.list8.1 之后,Android 的 Rom 包里面有
system.new.dat.br文件,这个是被压缩为.br(brotli) 格式的system.new.dat文件,也无法直接提取:1
2
3
4
5
6
7
8
9
10-rwxrwx---+ 1 Tianma None 50484554 1月 1 2009 boot.img
-rwxrwx---+ 1 Tianma None 9230 1月 1 2009 compatibility.zip
drwxrwx---+ 1 Tianma None 0 5月 14 23:26 firmware-update
drwxrwx---+ 1 Tianma None 0 5月 14 23:26 META-INF
-rwxrwx---+ 1 Tianma None 1694882420 1月 1 2009 system.new.dat.br
-rwxrwx---+ 1 Tianma None 0 1月 1 2009 system.patch.dat
-rwxrwx---+ 1 Tianma None 15019 1月 1 2009 system.transfer.list
-rwxrwx---+ 1 Tianma None 370088219 1月 1 2009 vendor.new.dat.br
-rwxrwx---+ 1 Tianma None 0 1月 1 2009 vendor.patch.dat
-rwxrwx---+ 1 Tianma None 3815 1月 1 2009 vendor.transfer.list
拆包步骤
Windows 下的拆包
准备:
- 系统:windows 10
- 环境:
- 下载 system.new.dat-extractor
操作步骤:
- 将
system.new-data-extractor工具放到一个路径中没有空格的目录下 - 将 Rom 的
.zip放到与前面相同的目录下 - 打开
system_image_extractor-V4.cmd文件,之后会自动解包,提取出来的文件存放在extracted_files目录下
最终解压出来的:
1 | drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 app/ |
macOS 下的拆包
系统:macOS 10.15
操作步骤:
将
system.new.dat.br解压缩为system.new.dat,Android 8.1 及以后版本需要,低版本无需此步骤:安装
brotli:1
brew install brotli
使用
brotli解压缩.br文件:1
brotli --decompress system.new.dat.br -o system.new.dat
将
system.new.dat转为.img镜像文件:下载 sdat2img.py,需要
Python 2.7+或者Python 3.x环境.dat文件转换:1
sdat2img.py system.transfer.list system.new.dat system.img
此时的
system.img是ext4格式的镜像文件
挂载
ext4格式的system.img文件:安装 OSX FUSE,常规安装最新版即可
安装
ext4fuse:1
brew install ext4fuse
使用
ext4fuse挂载system.img:1
ext4fuse system.img mounted-img/
至此,就可以在 mounted-img/ 目录下看到解压出来的包了:
1 | $ ls |