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生成過程
AS用Java代碼編寫的.java文件經過JavaC編譯成.class文件再通過dex工具成.dex文件。
虛擬機
1.JVM
JVM加載機制
2.Dalvik
Dalvik作為面向Linux、為嵌入式操作系統設計的虛擬機,支持已轉換為.dex?格式的Java應用程序的運行。
每個進程對應著一個Dalvik虛擬機實例。
Dalvik早期并沒有JIT編譯器,直到Android2.2才加入了對JIT(just in time)的技術支持。
JIT:當App運行時,每當遇到一個新類,JIT編譯器就會對這個類進行編譯,經過編譯后的代碼,會被優化成相當精簡的原生型指令碼(即native code),這樣在下次執行到相同邏輯的時候,速度就會更快。所以導致應用第一次啟動速度較慢。
在 Dalvik下,應用每次運行的時候,字節碼仍需要通過即時編譯器轉換為機器碼,這會拖慢應用的運行效率
Dalvik與JVM主要區別是
- Dalvik 是基于寄存器的架構,而 JVM是棧機。
- Dalvik虛擬機加載的是.dex文件,JVM加載的是.class文件。
3.ART (Android Runtime)
Android4.4新增加的ART,5.0基本完善。
在ART 環境中,應用在安裝的時候,ART使用設備自帶的dex2oat工具來編譯應用,classes.dex文件會被工具dex2oat翻譯成本地機器指令,使其成為真正的本地應用。這個過程叫做預編譯(AOT,ahead of time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。
相比Dalvik,ART啟動時間快,電耗低等
不過安裝時間會相對長,應用占內存會更大。
總結
以上是生活随笔為你收集整理的Android—APK、JVM-Dalvik-ART的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频编解码概述
- 下一篇: Android—OkHttp同步异步请求