Manifest文件结构
一. 头部信息
- 文件魔数:4bytes 0x00080003
- 文件大小:4bytes
二、String Chunk
这个Chunk主要存放的是AndroidManifest文件中所有的字符串信息
| 字段名 | 含义 | 长度 |
|---|---|---|
| ChunkType | StringChunk的类型 | 固定四个字节:0x001C0001 |
| ChunkSize | StringChunk的大小 | 四个字节 |
| StringCount | StringChunk中字符串的个数 | 四个字节 |
| StyleCount | StringChunk中样式的个数,在实际解析过程中,这个值一直是0x00000000 | 四个字节 |
| Unknown | 位置区域,在解析的过程中需要略过 | 四个字节 |
| StringPoolOffset | 字符串池的偏移值,这个偏移值是相对于StringChunk的头部位置 | 四个字节 |
| StylePoolOffset | 样式池的偏移值,这里没有Style,所以这个字段可忽略 | 四个字节 |
| StringOffsets | 每个字符串的偏移值 | 大小应该是:StringCount*4个字节 |
| SytleOffsets | 每个样式的偏移值 | 大小应该是SytleCount*4个字节 |
字符串是utf-16的宽字符,每个字符占2个字节,每个字符串块的前两个字节标识字符串的长度,以0x0000结尾,长度不包括尾部的结束符0x0000。
三、ResourceIdChunk
这个Chunk主要是存放的是AndroidManifest中用到的系统属性值对应的资源Id(0x01xxxxxx),比如android:versionCode中的versionCode属性
| 字段名 | 含义 | 长度 |
|---|---|---|
| ChunkType | StringChunk的类型 | 固定四个字节:0x00080180 |
| ChunkSize | StringChunk的大小 | 四个字节 |
| ResourceIds | 资源ID列表 | (chunkSize-8)/4 * 4bytes |
Package ID相当于是一个命名空间,限定资源的来源,0x01属于系统资源命名空间,0x7f属于应用程序资源命名空间,所有位于[0x01, 0x7f]之间的Package ID都是合法的,而在这个范围之外的都是非法的Package ID。
Type ID是指资源的类型ID。资源的类型有animator、anim、color、drawable、layout、menu、raw、string和xml等等若干种,每一种都会被赋予一个ID。
Entry ID是指每一个资源在其所属的资源类型中所出现的次序。注意,不同类型的资源的Entry ID有可能是相同的,但是由于它们的类型不同,我们仍然可以通过其资源ID来区别开来。
系统资源对应id的xml文件所在路径:frameworks\base\core\res\res\values\public.xml,版本越高的Sdk定义的ID项越多。
| ID | 资源类型type |
|---|---|
| 0x0101xxxx | attr |
| 0x0102xxxx | id |
| 0x0103xxxx | style |
| 0x0104xxxx | string |
| 0x0105xxxx | dimen |
| 0x0106xxxx | color |
| 0x0107xxxx | array |
| 0x0108xxxx | drawable |
| 0x0109xxxx | layout |
| 0x010axxxx | anim |
| 0x010bxxxx | animator |
| 0x010cxxxx | interpolator |
| 0x010dxxxx | mipmap |
| 0x010exxxx | integer |
| 0x010fxxxx | transition |
| 0x0110xxxx | raw |
四、StartNamespaceChunk
这个Chunk主要包含AndroidManifest文件中的命令空间的内容,Android中的xml都是采用Schema格式的,所以肯定有Prefix和Uri的。(xml格式有两种:DTD和Schema)
| 字段名 | 含义 | 长度 |
|---|---|---|
| ChunkType | Chunk的类型 | 固定四个字节:0x00100100 |
| ChunkSize | Chunk的大小 | 四个字节 |
| LineNumber | 在AndroidManifest文件中的行号 | 四个字节 |

本文详细探讨了AndroidManifest.xml文件的结构,包括头部信息、String Chunk、ResourceIdChunk、StartNamespaceChunk、StartTagChunk、EndTagChunk、EndNamespaceChunk以及如何格式化输出成XML文档。内容涵盖文件魔数、字符串块、资源ID、命令空间和标签信息等核心元素。
最低0.47元/天 解锁文章
1634

被折叠的 条评论
为什么被折叠?



