背景:
Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型
具体原因分析
代码路径:
frameworks/base/core/java/android/util/Xml.java
使用BinaryXmlSerializer最重要原因是:
1、可以有更快的速度
2、更小的体积
如何把二进制变成正常可读xml
方法1:
适合debug等版本上,可以随意进行恢复出厂删除相关的xml的场景
具体操作:
改变属性,删除原来的xml,或者恢复出厂,让系统重新生成xml,
属性修改如下:
adb shell setprop persist.sys.binary_xml false
修改后在把相关的xml要进行删除重启触发重新生成xml
方法2:
这种属于已有了这种二进制格式的xml,也不想清除这个xml让重新生成,因为这样可能重新生成的数据就不是原来xml的数据。
所以得考虑把原来的二进制格式的xml 转化成可读xml文件
Android系统中有一部分xml是二进制加密保存的,当我门用adb pull导出查看的时候发现是乱码,不用慌,下面我给大家介绍安卓系统自带的xml加解密工具,位于 /system/bin下,有abx2xml和xml2abx
1
2
3
4
5
6
7
| usage: abx2xml [-i] input [output]
adb shell abx2xml zipsrc.xml output.xml
//注意:可进入到文件所在目录进行操作,也可以复制文件到sdcard进行操作
//例如我们要查看sdcard下的AndroidDemoZip.xml,手动不指定输出路径,默认覆盖当前XML
1、adb shell
2、cd sdcard
3、abx2xml AndroidDemoZip.xml output.xml
|
1
2
3
| usage: xml2abx [-i] input [output]
adb shell xml2abx inputsrc.xml zipsrc.xml
//用法跟解压同理
|
源码位置:
1
2
3
4
5
6
7
8
9
10
11
| ~/Downloads/Study/Code/LA.QSSI.12.0.r1/frameworks/base/cmds/abx % ll
total 56
drwxrwxr-x@ 9 huangwentao staff 288 12 31 2021 .
drwxrwxr-x 35 huangwentao staff 1120 9 23 17:45 ..
-rw-rw-r-- 1 huangwentao staff 637 12 31 2021 Android.bp
-rw-rw-r-- 1 huangwentao staff 0 12 31 2021 MODULE_LICENSE_APACHE2
-rw-rw-r-- 1 huangwentao staff 10694 12 31 2021 NOTICE
-rwxrwxr-x 1 huangwentao staff 128 12 31 2021 abx
-rwxrwxr-x 1 huangwentao staff 128 12 31 2021 abx2xml
drwxrwxr-x 3 huangwentao staff 96 12 31 2021 src
-rwxrwxr-x 1 huangwentao staff 128 12 31 2021 xml2abx
|
1
2
| xml2abx ./system/users/0/appwidgets-read.xml ./system/users/0/appwidgets-binary.xml
abx2xml ./system/users/0/appwidgets.xml ./system/users/0/appwidgets-read.xml
|