当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ 11 for 循环和容器
  • Linux安全与高级应用(七)深入Linux Shell脚本编程:循环与分支结构的高级应用
  • 【算法】装箱问题
  • Apache Kylin分布式的分析数据仓库
  • pdf怎么加密码怎么设置密码?pdf加密码的几种设置方法
  • Python的安装环境以及应用
  • 日撸Java三百行(day17:链队列)
  • Adobe Premiere Pro 2024 v24.5.0.057 最新免费修改版
  • Flink Maven 依赖
  • gorm入门——如何实现分页查询
  • LVS(Linux virual server)详解
  • 密码学基础-为什么使用真随机数(True Random Number Generators)
  • 【Git】Git安装_配置
  • VisionPro二次开发学习笔记4-使用C#创建绘图图形
  • React(三):PDF文件在线预览(简易版)
  • JS 中的深拷贝与浅拷贝
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Android框架之Volley
  • echarts的各种常用效果展示
  • JavaScript 一些 DOM 的知识点
  • Map集合、散列表、红黑树介绍
  • PHP 7 修改了什么呢 -- 2
  • spring security oauth2 password授权模式
  • SpriteKit 技巧之添加背景图片
  • Vue.js 移动端适配之 vw 解决方案
  • 半理解系列--Promise的进化史
  • 对JS继承的一点思考
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聊聊flink的TableFactory
  • 三栏布局总结
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 系统认识JavaScript正则表达式
  • 译自由幺半群
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云服务器如何修改远程端口?
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (LLM) 很笨
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (回溯) LeetCode 78. 子集
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (数据结构)顺序表的定义
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)ABI是什么
  • (转)LINQ之路
  • (转)Windows2003安全设置/维护
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 简介:跨平台、开源、高性能的开发平台