Android學習心得(17) --- 二進位制AndroidManifest解析
阿新 • • 發佈:2019-02-04
我在部落格上發表一些我的Android學習心得,希望對大家能有幫助。
這一篇我們講述一下打包過後的AndroidManifest二進位制檔案。
二進位制AXML:
對於aapt打包後的APK中,我們沒有反編譯,直接對AndroidManifest檔案進行檢視的話
看到的會是如下圖所示
看到的是一堆亂碼,並不是我們想要看的,因為這個直接從APK中取出的檔案是二進位制檔案 我們可以使用AXMLPrinter工具來解析 使用命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > sourcexml.xml 這樣就可以進行檢視AndroidManifest.xml內容了
分析結構
AXML結構 |
---|
Magic Number |
File Size |
String Chunk |
ResourceId Chunk |
Xml Content Chunk |
AXML由上面5部分組成,下面我們分開分析
Magic Number是固定的 (Ox00080003) 4bytes 地址是Ox0-Ox3
File Size是表示檔案總長度 4bytes
對於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]
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檔案進行檢視