『壹』 Android各版本虛擬機的Dexopt區別
從Android 2.1版本到現在的Android 11 , 中間虛擬機變化過三次 :
對於5.0以下的版本 , 載入Multidex的時候 , 會優先判斷 odex 是否存在 , 如果不存在 , 則會通過dexopt生成odex , 然後再載入odex , 同時 , 如果存在 多個Dex文件 的話 , Dexopt 也會執行多次.
使用Dalvik虛擬機 , 生成odex文件 . Dalvik採用的是JIT編譯+解釋器,也就是即時編譯,每次應用運行時會實時將Dex翻譯成機器碼.
使用ART虛擬機 , 生成oat文件. 在ROM OTA或者恢復出場設置後 , 會要進行dex2oat根據當前ROM進行重新編譯生成.oat文件.
使用ART虛擬機 , 但是在7.0之上 , 增加了 .vdex 與 .art 機制 , 在ART虛擬機再次啟動/升級 , 載入Dex/Oat文件時 , 會減少Dex的校驗時間 , 提升載入與運行效率
在ART虛擬機的基礎上 , 增加了 Cdex ( Compat Dex ) 機制 ,
compat_dex_file.h
在dex2oat的時候 , 會有一個目標編譯類型 , 會有以下幾類 , 根據時機不同dex2oat的編譯方式也會不同
配置