Android4.4以上的版本就已經可以切換到Art虛拟機模式,Art虛拟機的作用在前面的《Android動态加載oat檔案總結一》中已經介紹過,今天主要來講講Oat檔案的格式,類比Dex檔案,Dex是給Dalvik來解釋的;而Oat就是給Art來解釋的。
這裡我主要解析的是Android4.4.2系統的Oat檔案格式,Android5.0的Oat格式跟Android4.4.2的有略微的不同,主要在于Oat中某些資料結構中的幾個字段,整體上還是不變的(檢視源碼可以清晰地看到)
首先Oat檔案中主要包含兩個主要的部分,oatdata和oatexec,
oatdata部分主要描述的是oat的頭部資訊,image檔案的資訊描述 , Dex的資訊描述 ,Dex原檔案的資訊 和 指向NativeCode的映射資訊:
先來看OatData部分的資料結構:
oat頭部資訊:

image檔案的資訊:
Dex資訊描述:
Dex原檔案資訊:
可以根據Dex資訊描述中的dex_file_pointer_資訊得到Dex檔案在oat檔案中的偏移,通過這個偏移就可以讀取到Dex檔案的資訊了
Dex檔案的格式在檔案art/runtime/dex_file.h中
指向NativeCode的映射資訊:
可以根據Dex資訊描述中的oat_class_offsets_pointer_來找到NativeCode的映射資訊,
再來看OatExec部分:
這部分主要是指令碼,通過上面的NativeCode的資訊中的資料字段code_offset_可以看到NativeCode在Oat檔案中相對于OatData的偏移,進而可以找到指令碼;
這裡主要描述了Oat的資料結構,也參照了羅升陽大牛的《Android運作時ART加載OAT檔案的過程分析》,大家結合那篇,然後在參照我這裡的介紹以及下面給出的源碼就可以了解與掌握Oat檔案的格式了,有不清楚的地方,歡迎随時批評,讨論
代碼下載下傳
http://pan.baidu.com/s/1i39rhBZ