Android—APK與JVM-Dalvik-ART

APK

APK的本質是一個zip壓縮包,如果將後綴名改成.zip,就可以解壓,APK 文件與 Zip 文件最大的一個不同是 APK 包含簽名信息,用於保證安裝包安全不被修改

res文件夾:用於存放Android資源文件的目錄,裏面有drawable圖片資源,佈局文件等,這裏面的文件都是被編譯過的(圖片除外)
assets目錄:用於存放需要打包到APK中的靜態文件,文件沒有進行編譯
META-INF目錄:即Metadata infomation元數據(又稱中介數據、中繼數據,用於描述數據的數據)信息目錄,裏面有MANIFEST.MF:摘要文件,列出了apk的所有文件,以及這些文件內容所對應的base64-encoded SHA1 哈希值,用於驗證apk文件的完整性,判斷apk是否被篡改;CERT.SF:摘要簽名文件,它列出了MANIFEST.MF這個文件中每條信息的hash值,用於驗證摘要文件是否被篡改;CERT.RSA:該文件保存瞭解密用的公鑰,以及加密算法等信息等
AndroidManifest.xml:Android的應用配置文件,描述了應用的總體信息,需要使用的用戶權限以及組件等等,已被編譯
resources.arsc:資源配置文件,用於記錄資源文件與資源id之間的映射關係,res/values中的信息大部分被編譯在此處
lib目錄:Android依賴的Native庫的目錄,其中會根據不同的cpu架構分爲多個子目錄
classes.dex:能用於dalvik執行的字節碼,由多個.class的Java字節碼文件組合而成

APK生成過程

虛擬機

1.JVM

JVM加載機制

2.Dalvik

Dalvik作爲面向Linux、爲嵌入式操作系統設計的虛擬機,支持已轉換爲.dex 格式的Java應用程序的運行

專有的DEX可執行文件格式,體積更小,執行速度更快。每個進程對應着一個Dalvik虛擬機實例。

Dalvik早期並沒有JIT編譯器,直到Android2.2才加入了對JIT的技術支持。

在 Dalvik下,應用每次運行的時候,a字節碼都需要通過即時編I譯器(JIT,just in time)轉換爲機器碼,這會拖慢應用的運行效率

Dalvik與JVM主要區別是

Dalvik 是基於寄存器的架構,而 JVM是棧機。

Dalvik虛擬機加載的是.dex文件,JVM加載的是.class文件。

3.ART (Android Runtime)

Android4.4新增加的ART。

在ART 環境中,應用在安裝的時候,ART使用設備自帶的dex2oat工具來編譯應用,classes.dex文件會被工具dex2oat翻譯成本地機器指令,使其成爲真正的本地應用。這個過程叫做預編譯(AOT,ahead of time)。這樣的話,應用的啓動(首次)和執行都會變得更加快速。

相比Dalvik,ART啓動時間快,電耗低等

不過安裝時間會相對長,應用佔內存會更大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章