一个纯Java、实现了SAX接口、无任何第三方依赖的 AndroidManifest.xml 解析工具。
Binary AndroidManifest.xml
Magic Number(0x00080003) 4bytes // 魔数
File Size 4bytes // 文件长度
String Chunk // 字符串常量池
Chunk Type(0x001C0001) 4bytes // Chunk类型
Chunk Size 4bytes // Chunk长度
String Count 4bytes // 字符串个数
Style Count 4bytes
Unknown 4bytes
String Pool Offset 4bytes // 字符串常量池相对于Chunk偏移值
Style Pool Offset 4bytes
String Offsets 4bytes * StringCount // 字符串相对于StringPoolOffset偏移值
Style Offsets 4bytes * StyleCount
String Pool *
String Length 2bytes // 字符串长度
String Content 2bytes * StringLength // 字符串内容
\0 2bytes // \0
Style Pool
ResourceId Chunk
Chunk Type(0x00080180) 4bytes
Chunk Size 4bytes
ResourceIds 4bytes * (ChunkSize / 4 - 2)
XmlContent Chunk *
Start Namespace Chunk
Chunk Type(0x00100100) 4bytes // Chunk类型
Chunk Size 4bytes // Chunk长度
Line Number 4bytes
Unknown 4bytes
Prefix 4bytes // namespace对应的前缀(常量池地址)
Uri 4bytes // namespace对应的URI(常量池地址)
End Namespace Chunk
Chunk Type(0x00100101) 4bytes
Chunk Size 4bytes
Line Number 4bytes
Unknown 4bytes
Prefix 4bytes
Uri 4bytes
Start Tag Chunk // 开始标签
Chunk Type(0x00100102) 4bytes // Chunk类型
Chunk Size 4bytes // Chunk长度
Line Number 4bytes
Unknown 4bytes
Namespace Uri 4bytes // 标签Namespace URI
Name 4bytes // 标签名
Flags 4bytes
Attribute Count 4bytes // 属性个数
Class Attribute 4bytes
Attributes *
Namespace Uri 4bytes // 属性Namespace URI
Name 4bytes // 属性名
Value 4bytes // 字符串属性值(常量池地址)
Type 4bytes // 属性值类型
Data 4bytes // 属性值
End Tag Chunk // 结束标签
Chunk Type(0x00100103) 4bytes // Chunk类型
Chunk Size 4bytes // Chunk长度
Line Number 4bytes
Unknown 4bytes
Namespace Uri 4bytes
Name 4bytes
Text Chunk // 文本内容
Chunk Type(0x00100104) 4bytes // Chunk类型
Chunk Size 4bytes // Chunk长度
Line Number 4bytes
Unknown 4bytes
Name 4bytes // 文本(常量池地址)
Unknown 4bytes
Unknown 4bytes
ByteBuffer.order
ByteBuffer.get
ByteBuffer.getInt
ByteBuffer.getFloat
parse
parseStringChunk
parseString
parseResourceIdChunk
parseStartNamespaceChunk
parseEndNamespaceChunk
parseStartTagChunk
parseAttribute
parseAttributeValue
parseEndTagChunk
parseTextChunk
public class AndroidManifestReader implements XMLReader {
}
public class ApkInputSource extends InputSource {
}
// 转为Document
transformer.transform(
new SAXSource(new AndroidManifestReader(), new ApkInputSource(new URL("http://xxx.apk"))),
new DOMResult(document));
// 输出XML
transformer.transform(
new SAXSource(new AndroidManifestReader(), new ApkInputSource(new URL("http://xxx.apk"))),
new StreamResult(writer));
如有侵权,请告知,立即删除相关文字及图片。
- AndroidManifest.xml文件格式
http://blog.csdn.net/jiangwei0910410003/article/details/50568487 - 属性值解析相关代码
https://github.com/xgouchet/AXML