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

news2024/9/21 4:38:53

背景:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cxx primer-chap13-Copy Control

copy控制涉及类的五个成员函数:,这五个成员函数被显式或隐式的被调用,各司其职:我们必须根据类的实际情况来确定是否需要显式定义这些成员函数:什么是拷贝构造函数呢?简单讲就是该函数的第一个形参是refere…

malloc函数与free函数

目录 开头1.怎样把数组初始化时的项数变成变量?malloc函数free函数 2.malloc函数与free函数的实际运用CC6 牛牛的排序随机乱码打印随机数组打印 结尾 开头 大家好,我叫这是我58。今天,我们来学一下如何把数组初始化时的项数变成变量的一些知识。 1.怎…

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程,我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能,成为软件开发中不可或缺的工具。 文章大纲 Git简介…

自查出癌症后 凯特王妃的生活观发生了变化 王室的粉丝们也应该会很少见到她

凯特米德尔顿今年的健康问题令人意外,这也改变了王室的面貌。这位威尔士王妃每次露面都引来巨大关注,因此王室不得不发挥创意,将更多精力放在威廉王子、索菲、爱丁堡公爵夫人,甚至查理三世国王的社交日程上。王室粉丝们可能期待着凯特恢复健康,恢复正常日程,但内部人士称…

unity 粒子系统学习

差不多了解了基本的ui面板,学一下粒子系统 取消轮廓线 这样粒子biubiu的时候就没有橙黄色的轮廓线了

lvs的dr模式实现

目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能,并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…

【Redis进阶】Redis单线程模型和多线程模型

目录 单线程 为什么Redis是单线程 处文件事件理器的结构 文件处理器的工作流程 总结 文件事件处理器 连接应答处理器 命令请求处理器 命令回复处理器 多线程 为什么引入多线程 多线程架构 多线程执行流程 关于Redis的问题 Redis为什么采用单线程模型 Redis为什…

【STM32】USART串口和I2C通信

个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…

Chapter 29 类型注解

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、变量的类型注解二、函数的类型注解三、Union类型注解 前言 类型注解为我们提供了一种清晰的方式来描述变量和函数的预期类型,使得代码的意图更加明确。…

GMMREG:基于高斯混合模型的鲁棒点集配准

其关键思想都是用连续密度函数表示离散点集,即高斯混合模型。不同点在于本节算法采用L2距离来衡量两个点云之间的相似性,而5.7节中的NDT算法采用的是作者定义的匹配势来衡量,实际上是所有线段对之间的差异。并且本节算法中加入了薄板样条插值…

打造分布式缓存组件【场景】

本文将采用AOP 反射 Redis自定义缓存标签,重构缓存代码,打造基础架构分布式缓存组件 配置 需要在Redis配置类中开启AOP自动代理,即通过EnableAspectJAutoProxy 注解实现该功能 import com.fasterxml.jackson.annotation.JsonAutoDetect; …

「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)

概述 对于一张单向链表,我们总是使用双指针实现一些算法逻辑,这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法,是指不使用额外空间的算法。 现在,我们利用双指针实现以下四种行为。 //Definition fo…

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析,一个整体框架。 1、首先说说,单片机,的i2c硬件接口图,一个i2c接口,通过sda和scl总线,外接了多个设备device,通过单片机,来控制i2c的信号发生&…

VUE和Element Plus

1.VUE 1.下载和配置环境 使用vue编程,我们需要使用到的编程软件是vs code,还需要使用node.js,这个的作用就类似于JDK,当我们都下载好之后,winR键打开命令提示符,我们在这里可以查看版本, npm…

《计算机网络 - 自顶向下方法》阅读笔记

《计算机网络 - 自顶向下方法》阅读笔记 应用层、运输层、网络层、数据链路层 计算机网络和因特网: 因特网: ​ 是一个世界范围的计算机网络,互联了全世界的计算机设备 计算机设备:手机,电脑,游戏机&#…

MATLAB数据可视化:在地图上画京沪线的城市连线

matlab自带的geoplot(lat,lon) 可以在地理坐标中绘制线条。使用 lat和lon分别指定以度为单位的经度和纬度坐标。 绘制京沪线所经城市线条: citys [116.350009,39.853928; 116.683546,39.538304; 117.201509,39.085318; 116.838715,38.304676;...116.359244,37.436…

Java网络编程——HTTP协议原理

协议 我们在网上冲浪时,会在浏览器地址栏输入一个网址,然后就能打开网页了。比如,输入 https://www.douban.com/就可以访问到豆瓣的主页: 那么大家是否好奇:https 是什么意思,作用又是什么呢?…

语言模型简介和Ngram模型(1)

语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…

unity 创建项目报错feature has expired (H0041),sentinel key not found (H0007)

两个报错同一种处理方式。 1、删除以下路径所有文件:C:\ProgramData\SafeNet Sentinel(注意:ProgramData为隐藏文件) 2、打开Cmd(WinR键,输入cmd回车),进入Unity安装所在盘符&#…

SecureCRT记录会话日志

在使用SecureCRT软件的时候,有个非常实用的功能:记录会话日志,就是可以把当前会话的所有记录保存成文本文件。下面简单介绍一下如何使用这个功能。 首先点击SecureCRT软件左上角的文件 然后点击会话日志即可 然后选择一个路径保存日志&#…