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
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啓動時間快,電耗低等
不過安裝時間會相對長,應用佔內存會更大。