1. 程式人生 > >Android學習心得(17) --- 二進位制AndroidManifest解析

Android學習心得(17) --- 二進位制AndroidManifest解析

我在部落格上發表一些我的Android學習心得,希望對大家能有幫助。
這一篇我們講述一下打包過後的AndroidManifest二進位制檔案。

二進位制AXML:

對於aapt打包後的APK中,我們沒有反編譯,直接對AndroidManifest檔案進行檢視的話
看到的會是如下圖所示

1

看到的是一堆亂碼,並不是我們想要看的,因為這個直接從APK中取出的檔案是二進位制檔案
我們可以使用AXMLPrinter工具來解析
使用命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > sourcexml.xml
這樣就可以進行檢視AndroidManifest.xml內容了

2

分析結構

AXML結構
Magic Number
File Size
String Chunk
ResourceId Chunk
Xml Content Chunk

AXML由上面5部分組成,下面我們分開分析
Magic Number是固定的 (Ox00080003) 4bytes 地址是Ox0-Ox3
File Size是表示檔案總長度 4bytes
3

對於String Chunk代表的是字串塊,格式是:

String Chunk結構
Chunk Type Ox001c0001 4bytes
Chunk Size 4bytes String Chunk大小
String Count 4bytes String塊個數
Style Count 4bytes
Reverse field 8bytes 保留欄位,為0
String offset 4bytes String偏移量相對於String Chunk而言
Style offset 同上
String pool 連線String offset
Style pool 連線String offset

String格式:[String offset + Ox00000008 + String pool offset]
4

ResourceId Chunk結構
Chunk Type
Chunk Size
ResourceId

ResourceId Chunk 包含5種

ResourceId Chunk
Start namespace chunk
End namespace chunk
Start Tag chunk
End Tag chunk
Text Chunk

Start namespace chunk

Start namespace chunk
Chunk Type Ox00100100 4bytes
Chunk Size 4bytes Start namespace chunk大小
Link Number 4bytes 編碼前檔案行號
Unknow OxFFFFFFFF 4bytes
Prefix 4bytes string pool中索引號
Uri 4bytes 與Prefix有對應關係

End namespace chunk

End namespace chunk
Chunk Type Ox00100101 4bytes
Chunk Size 4bytes End namespace chunk大小
Link Number 4bytes 編碼前檔案行號
Unknow OxFFFFFFFF 4bytes
Prefix 4bytes
Uri 4bytes 與Prefix有對應關係

Start Tag chunk

Start Tag chunk
Chunk Type Ox00100102 4bytes
Chunk Size 4bytes Start Tag chunk大小
Link Number 4bytes 編碼前檔案行號
Unknow OxFFFFFFFF 4bytes
Namespace Uri 4bytes (OxFFFFFFFF->返回NULL)
Name 4bytes
Flags Ox00140014 4bytes
Attribute Count 4bytes XML標籤下的屬性個數
Class Attribute 4bytes
Attribute Attribute Count * 5 * 4byte

[Namespace Uri(Uri對應Prefix值), Name(String索引), Value String(OxFFFFFFFF->-1), Type, Data]

End Tag chunk

End Tag chunk
Chunk Type Ox00100103 4bytes
Chunk Size 4bytes End Tag chunk大小
Link Number 4bytes 編碼前檔案行號
Unknow OxFFFFFFFF 4bytes
Namespace Uri 4bytes
Name 4bytes

Text chunk

Text chunk
Chunk Type Ox00100104 4bytes
Chunk Size 4bytes Text chunk大小
Link Number 4bytes 編碼前檔案行號
Unknow OxFFFFFFFF 4bytes
Name 4bytes
Unknow OxFFFFFFFF 4bytes
Unknow OxFFFFFFFF 4bytes

比較方便的是使用010 Editor來進行檢視,我們可以執行模板,然後對AXML檔案進行檢視
6
7