rsources.arsc格式详解(2020年)

2020-01-10  本文已影响0人  河里的枇杷树

首先我们说一下 为什么 要写这篇文章

  1. 网上关于 rsources.arsc 文件解析的文章 内容较老
  2. 很少对每个chunk的含义做解释,或者 解释比较含糊

rsources.arsc 文件解析文章里基本上都有一张‘神图’但是里面缺少了一些内容。所以我就在 这张图的基础上,重新画了一张,增加了一些内容,最后对 各个 chunk 中包含的内容进行讲解。

arsc.png

每一块的含义(顺序从左至右,从上到下)

ResTableHeader

下面为了方便我就不写 占用空间了。看图就可以一目了然

ResStringPool
res/anim/abc_slide_in_bottom.xml

如果是 utf-8,则字符串以 0x00 结尾,开头前两个字节分别表示 u8len 和 u16len。如果是 utf-16,则字符串以 0x0000 结尾,开头前两个字节表示 u16len,没有 u8len 字段。(u16len 和 u8len,分别代表 UTF-8 和 UTF-16 下的字符串长度)

ResTablePackage
ResTypeLibrary

是5.0之后才加入的,所以网上那么比较陈旧的文章中没有提及。它的作用就是正确的查找 ResTable_map_entry 类型Entry数据的parent。一般用不到,aapt在构建arsc文件时 会在 packageId 不是 0X7F(用户包) 才会加入。不一定存在

ResTypeSpecChunk

用来描述资源项的配置差异性。系统根据不同设备的配置差异就可以加载不同的资源项(会有多个)

ResTypeInfocChunk

资源项的具体信息,包括资源项的名称,类型,值和配置等等

ResTable_entry

用于表示这种 key/value形式的


1.png
ResTable_map_entry

用于表示这种形式的


2.png
  1. 本篇文章并没有对 rsources.arsc 文件的解析过程如果 想了解建议参考 https://github.com/NiLuogege/AndResGuardDebug.这个是我阅读 AndResGuard 源码时的项目,里面有详细的 注释
参考

1. https://www.jianshu.com/p/d62efb89b319

2. https://blog.csdn.net/chzphoenix/article/details/80567037

3. https://www.jianshu.com/p/93a38bebeaff

4. https://www.jianshu.com/p/3cc131db2002

5. 微信官方公众号出品

上一篇 下一篇

猜你喜欢

热点阅读