之前由于开发一个关于 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 |