aot,oat,art...是不是有的時候傻傻分不清楚,該文章主要解釋dalvik, Art,JIT ,AOT, oat, dex, odex這些概念,已便于理解Android 應(yīng)用編譯和運行的過程及安裝過程。?
執(zhí)行環(huán)境dalvik, Art
dalvik這個大家肯定很熟悉 Dalvik是Google公司設(shè)計用于Android平臺的Java虛擬機?
Art是(Android runtime) 在Android系統(tǒng)4.4提出 在5.0之后完全棄用dalvik 全部采用art為執(zhí)行環(huán)境
在Dalvik下,應(yīng)用每次運行的時候笋轨,字節(jié)碼都需要通過即時編譯器(JIT)轉(zhuǎn)換為機器碼,這會拖慢應(yīng)用的運行效率,而在ART 環(huán)境中爵政,應(yīng)用在第一次安裝的時候仅讽,字節(jié)碼就會預(yù)先編譯成機器碼(這種機制稱為AOT) 這樣的話,應(yīng)用執(zhí)行變得更加快速钾挟。
編譯模式 JIT洁灵,AOT
上述提到的兩種編譯模式j(luò)it 和aot,可以理解為是一種編譯策略
?JIT (just in time)??運行時編譯?
AOT (Ahead-Of-Time) ??運行前編譯 Art的主要特征就是AOT
文件格式 oat dex和odex
dex(Dalvik Executable)格式是專門為Dalvik設(shè)計的一種壓縮格式等龙,
? ? ? ? (javac) ? ? ? ???(dx工具)
.java------>.class------->.dex
.java文件經(jīng)過javac編譯器生成.class字節(jié)碼 再經(jīng)過处渣。dx工具生成.dex
odex(optimized dex)即優(yōu)化的dex
對于在dalvik環(huán)境中 使用dexopt來對dex字節(jié)碼進行優(yōu)化 生成odex文件 最終存在手機的data/dalvik-cache目錄下
對于art環(huán)境,使用dex2oat工具來對dex字節(jié)碼生成oat文件
oat文件是art的核心蛛砰,oat文件包含oatdata和oatexec
前者包含dex文件內(nèi)容罐栈,后者包含生成的本地機器指令,進而可以直接運行,同樣保存在手機的data/dalvik-cache目錄下
PMS(PackgetManagerService)--->installd(守護進程)------>dex2oat(/system/bin/dex2oat)
注意存放在data/dalvik-cache目錄下的后綴名都仍為.dex 前者其實表示一個優(yōu)化過的.dex文件 后者為.oat文件
apk安裝過程
大家都知道 apk其實就是zip包 apk安裝過程其實就是解壓過程
用戶應(yīng)用安裝涉及以下幾個目錄
data/app 安裝目錄 安裝時會把apk文件copy到這里
data/dalvik-cache 如上述描述中的存放.dex(.odex 無論davilk的dex 還是art的oat格式)
data/data/pkg/ 存放應(yīng)用程序的數(shù)據(jù)