android系统中data下的xml乱码无法查看问题剖析及解决方法

背景:

Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型,根本没办法看xml的内容具体如下:

比如想要看当前系统的widget的相关数据

./system/users/0/appwidgets.xml

以前老版本都是可以直接看的,这些system的xml其实对于调试和分析等有时候还是很有作用的

那么这到底是为什么呢,要把这种用户可读的xml变成这种乱码二进制的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

或者去相关代码中

修改如下:

修改前看看appwidget.xml的展示数据
一堆的乱码根本没办法看

修改后的看看appwidget.xml的展示数据
明显可以看出是可以读了

方法2:

这种属于已有了这种二进制格式的xml,也不想清除这个xml让重新生成,因为这样可能重新生成的数据就不是原来xml的数据。

所以得考虑把原来的二进制格式的xml 转化成可读xml文件

实际两种xml本事是有标识头的,根据xml的标识头就可以确定是二进制xml还是普通xml,从而选择正确解析方法

不过这种工具还没有找到现成的,如果实在没有考虑后续写个这种转换工具进行开源

总结:

高版本安卓主要是考虑到使用二进制xml

1、二进制xml的性能方面速度比传统xml快

2、占用数据体积比传统xml要小

以上两个优势就是使用二进制xml根本原因,系统默认二进制xml也是可以通过标志位修改变成普通xml,但是要清除数据重新生成,想要二进制xml直接变成普通xml需要对原来的二进制xml进行解析后重新写入新的普通xml

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg

其他课程七件套专题:

点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

更多framework假威风耗:androidframework007

相关推荐
似霰3 小时前
安卓adb shell串口基础指令
android·adb
小刘同学++4 小时前
Qt 处理 XML 数据
xml·qt
fatiaozhang95275 小时前
中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
android·adb·电视盒子·魔百盒刷机·魔百盒固件
CYRUS_STUDIO6 小时前
Android APP 热修复原理
android·app·hotfix
鸿蒙布道师7 小时前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师7 小时前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
大耳猫7 小时前
【解决】Android Gradle Sync 报错 Could not read workspace metadata
android·gradle·android studio
ta叫我小白7 小时前
实现 Android 图片信息获取和 EXIF 坐标解析
android·exif·经纬度
dpxiaolong8 小时前
RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)
android·windows
tangweiguo0305198710 小时前
Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案
android