Android为什么把文本格式的XML文件编译成二进制格式的XML文件

时间:2021-7-21 作者:qvyue

当我们把一个apk文件以zip的形式进行解压,得到其中的文件,我们找到其中的一个布局文件,用文本编辑器(比如vscode)查看,发现并不能打开:

Android为什么把文本格式的XML文件编译成二进制格式的XML文件

这是为什么呢?

原来Android工程在构建的过程中,把类型为res/animator、res/anim、res/color、res/drawable(非Bitmap文件,即非.png、.9.png、.jpg、.gif文件)、res/layout、res/menu、res/values和res/xml的资源文件均会从文本格式的XML文件编译成二进制格式的XML文件。

如果我们在vscode中以hexdump的格式查看这个文件,还能依稀看见这个文件的一些影子:

Android为什么把文本格式的XML文件编译成二进制格式的XML文件
    这些XML资源文件之所以要从文本格式编译成二进制格式,主要是因为二级制格式的xml文件有一下好处:
  1. 二进制格式的XML文件占用空间更小。这是由于所有XML元素的标签、属性名称、属性值和内容所涉及到的字符串都会被统一收集到一个字符串资源池中去,并且会去重。有了这个字符串资源池,原来使用字符串的地方就会被替换成一个索引到字符串资源池的整数值,从而可以减少文件的大小。

  2. 二进制格式的XML文件解析速度更快。这是由于二进制格式的XML元素里面不再包含有字符串值,因此就避免了进行字符串解析,从而提高速度。

那我们如果查看已经打包好的apk文件中的xml文件呢?别着急,Android Studio已经帮我们提供了工具。我们可以利用Android Studio 的 apk analyze工具来查看xml文件。

我们可以通过如下图选择我们想要查看的apk文件来查看对应的xml文件:

Android为什么把文本格式的XML文件编译成二进制格式的XML文件
Android为什么把文本格式的XML文件编译成二进制格式的XML文件

当然我们把apk文件直接拖到Android Studio中也是一样的效果。

本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。