Dalvik和Art,JIT ,AOT, oat, dex, odex
該文章主要解釋dalvik, Art,JIT ,AOT, oat, dex, odex這些概念,已便於理解Android 應用編譯和執行的過程及安裝過程。
執行環境dalvik, Art
dalvik這個大家肯定很熟悉 Dalvik是Google公司設計用於Android平臺的Java虛擬機器
Art是(Android runtime) 在Android系統4.4提出 在5.0之後完全棄用dalvik 全部採用art為執行環境
在Dalvik下,應用每次執行的時候,位元組碼都需要通過即時編譯器(JIT)轉換為機器碼,這會拖慢應用的執行效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼(這種機制稱為AOT) 這樣的話,應用執行變得更加快速。
編譯模式 JIT,AOT
上述提到的兩種編譯模式jit 和aot,可以理解為是一種編譯策略
JIT(just in time) 執行時編譯
AOT(Ahead-Of-Time) 執行前編譯 Art的主要特徵就是AOT
檔案格式 oat dex和odex
dex (Dalvik Executable )格式是專門為Dalvik設計的一種壓縮格式,
(javac) (dx工具)
.java------>.class------->.dex
.java檔案經過javac編譯器生成.class位元組碼 再經過。dx工具生成.dex
odex(optimized dex) 即優化的dex
對於在dalvik環境中 使用dexopt來對dex位元組碼進行優化 生成odex檔案 最終存在手機的data/dalvik-cache目錄下
對於art環境,使用dex2oat工具來對dex位元組碼生成oat檔案
oat檔案 是art的核心,oat檔案包含oatdata和oatexec
前者包含dex檔案內容,後者包含生成的本地機器指令,進而可以直接執行,同樣儲存在手機的data/dalvik-cache目錄下
PMS(PackgetManagerService)--->installd(守護程序)------>dex2oat(/system/bin/dex2oat)
注意存放在data/dalvik-cache目錄下的字尾名都仍為.dex 前者其實表示一個優化過的.dex檔案 後者為.oat檔案
apk安裝過程
大家都知道 apk其實就是zip包 apk安裝過程其實就是解壓過程
使用者應用安裝涉及以下幾個目錄
data/app 安裝目錄 安裝時會把apk檔案copy到這裡
data/dalvik-cache 如上述描述中的存放.dex(.odex 無論davilk的dex 還是art的oat格式)
data/data/pkg/ 存放應用程式的資料