一、vdex
package 直接轉化的 可執行二進制碼 文件:
1.第一次開機就會生成在/system/app/<packagename>/oat/下;
2.在系統運行過程中,虛擬機將其 從 “/system/app” 下copy到 “/data/davilk-cache/” 下
二、odex
odex 是從vdex 這個文件中 提取了部分模塊生成的一個新的 可執行二進制碼 文件 , odex 從vdex 中提取后,vdex 的大小就減少了。
1.第一次開機就會生成在/system/app/<packagename>/oat/ 下
2.在系統運行過程中,虛擬機將其 從 “/system/app” 下copy到 “/data/davilk-cache/”下
3.odex + vdex = apk的全部源碼(vdex 並不是獨立於odex的文件 odex + vdex才代表一個apk )
三、art
odex進行優化生成的可執行二進制碼文件,主要是apk啟動的熱點函數相關地址的記錄,方便尋址相關
1.第一次開機不會生成在/system/app/<packagename>/oat/ 下,以后也不會;
2.odex 文件在運行時,虛擬機會計算函數調用頻率,進行函數地址的修改;
3.最后在/data/davilk-cache/ 由虛擬機生成
4.生成art 文件后,/system/app 下的odex 和 vdex 會無效,即使你刪除,apk也會正常運行
5.push 一個新的apk file 覆蓋之前/system/app 下apk file ,會觸發PKMS 掃描時下發force_dex flag ,強行生成新的vdex 文件 ,覆蓋之前的vdex 文件,由於某種機制,這個新vdex 文件會copy到/data/dalvik-cache/下,於是art 文件也變化了。