快速理清 .dex、.odex、ART、AOT、OAT 邏輯關(guān)系

目的

理清 .dex、.odex、ART、AOT、OAT 等近似名稱的概念和意義。

APK 生成

apk的打包過(guò)程

最終 apk 內(nèi)的代碼文件為 .dex 文件。

APK 安裝運(yùn)行

基礎(chǔ)概念

AOT:編譯方式,運(yùn)行前編譯。
JIT:編譯方式,動(dòng)態(tài)編譯。
Dalvik:Android 5.0 之前默認(rèn)虛擬機(jī)。
ART:Android 5.0 及其之后默認(rèn)虛擬機(jī)。
OAT:Android 私有 ELF 文件格式,后綴為 .odex。不僅包含從 .dex 翻譯過(guò)來(lái)的二進(jìn)制本地機(jī)器指令,還包含原來(lái)的 .dex 文件內(nèi)容。這使得無(wú)需重新編譯原 APK 就能直接在 ART 中運(yùn)行。

多種安裝運(yùn)行方式

名稱 編譯方式 特性 備注
Dalvik JIT 運(yùn)行時(shí)編譯 .dex,.dex 是 DVM 使用的運(yùn)行時(shí)編譯字節(jié)碼。系統(tǒng)第一次開機(jī)會(huì)提取 apk 內(nèi)的 dex 文件生成 .odex,以提升運(yùn)行時(shí)編譯的速度。 此 .odex 只是對(duì) .dex 文件的提取,這樣運(yùn)行時(shí)無(wú)需再次從 apk 提取,可以加速編譯,并非可執(zhí)行文件。
ART AOT 安裝時(shí)編譯。安裝時(shí)生成 OAT 文件,該文件包含機(jī)器碼,可以直接運(yùn)行。 此 .odex 可以直接運(yùn)行。
Android N 之后 JIT、AOT 混編 安裝時(shí) JIT,系統(tǒng)空閑時(shí) AOT 針對(duì) "熱代碼"(常用代碼塊)編譯為 OAT 保存在本地。 時(shí)間、空間的綜合方案。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容