Android APK安裝過程學習筆記,androidapk

來源:互聯網
上載者:User

Android APK安裝過程學習筆記,androidapk
1.什麼是APK

  APK,即Android Package,Android安裝包。不同平台的安裝檔案格式都不同,類似於Windows的安裝包是二進位的exe格式,Mac的安裝包是dmg格式。APK可以再Android上執行安裝,APK的本質是一個Zip壓縮包,只是尾碼被修改為apk,其中打包了原始碼編譯出的class.dex、一些圖片視屏資源檔和一些Native庫檔案。APK檔案與Zip檔案最大的一個不同是APK包含簽名檔案,用於保證安裝包安全不被修改。

2.什麼是DEX檔案和ODEX檔案

  Java卡平台是由原始碼編譯出的class檔案分別運行在不同平台的虛擬機器上,由虛擬機器屏蔽了不同平台的差異。但是由於Android系統針對手持功能,對Dalvik虛擬機器進行了最佳化,主要包括:
    (1)將原來class檔案進行最佳化,例如將其中的常量冗餘資訊進行合并,提供虛擬機器解析效率;
    (2)修改JVM運行時基於棧的資料結構修改為Dalvik基於寄存器的資料結構,資料訪問方式更快,運行效率更高。
  這種情況下,原來的.class檔案就有些不適用了,因此,出現了dex檔案格式,它是原始碼編譯後打包產生的檔案。它是APK的一個組成部分。ODEX檔案是Dalvik將dex檔案中可執行檔class.dex檔案解壓出來後,儲存在本地後產生的。因為Android系統無法直接運行APK檔案,需要將其解壓後找到class.dex檔案後才可以運行,因此在安裝時就將其取出放在本地,可以提高應用啟動速度。除了這個原因,其實在將class.dex轉換成ODEX檔案過程中,還根據當前系統進行了最佳化(直接複製到其他系統不一定可以運行),檔案大小會減少,ODEX檔案比DEX檔案更難反編譯,這也在一定程度上提高了安全性,因此在一些系統預先安裝或系統級應用大多採用了ODEX最佳化。一般ODEX不直接運行,在Dalvik運行ODEX時,需要通過JIT進行最佳化,提高運行效率。JIT是一種在運行時同步將位元組碼轉化成機器碼的過程,Dalvik直接運行轉化後的機器碼,這會導致部分的記憶體和時間開銷,但是整體來說,在某些情況下是會提高系統效能的。(有些動態編譯器,可能根據經驗或嘗試編譯,最佳化這一過程,可能運行次數越多,最佳化效果越好)。

3.什麼是OAT檔案

  OAT檔案是ART啟動並執行檔案,是一種二進位可運行檔案,包含DEX檔案和編譯出的本地機器指令檔案,其檔案格式類似於網路資料報文,包含檔案頭和檔案體,檔案頭的oatdata、oatexec和oatlastword欄位分別描述DEX檔案位置和本地機器指令的起止位置。因為OAT檔案包含DEX檔案,因此比ODEX檔案佔用空間更大,由於其在安裝時經過了ART的處理,ART載入OAT檔案後不需要經過處理就可以直接運行,它沒有了從位元組碼轉換成機器碼的過程,因此運行速度更快。可以理解為JIT進行最佳化從運行時才解析提前到了安裝時解析,安裝變慢,運行變快。

4.什麼是Dalvik和ART

  Dalvik和ART都是Android運行環境,但是由於Dalvik存在一些不足,ART是在高版本手機上替換Dalvik的。Dalvik和ART是Android平台實現的JAVA虛擬機器。用於解析DEX檔案、ODEX檔案和OAT檔案。ART即Android Runtime,Android運行時,由於Android系統運行在不同的裝置上,底層硬體不同,Linux系統屏蔽了一些這些系統的細節,但是直接在Linux上開發應用太難,實現成本太高,為了屏蔽Linux的細節,Google建立出了Dalvik和ART,對Linux進行了再一次封裝,這樣,
使用Google提供的整合式開發環境SDK,就可以輕鬆開發應用了,Dalvik與ART的關係是ART用來替換Dalvik,現在市場上ART的佔用率已經超過了70%。ART是Android應用的運行模式,在這種模式下,Android應用在安裝後,會進行一次先行編譯,將應用安裝包中的位元組碼轉換成機器語言儲存在本地(系統只能運行二進位程式),這樣,應用在運行時,可以直接執行這些二進位程式。相比較於Dalvik來說,Dalvik的做法是在應用安裝後,直接將位元組碼儲存起來,在每次運行時,需要將代碼編譯成機器語言,這樣在運行程式時,就比ART慢了一些。ART這樣做導致了安裝後應用所佔的空間更大,安裝時間更長,但是對於經常使用的應用,這樣做是值得的。

5.APK是如何安裝的?

  程式的原始碼,首先經過SDK編譯成DEX檔案,DEX檔案和一些資源檔(圖片、視頻等)、Native Code(C語言等編譯出的.so檔案)會直接打包進APK。安裝APK的過程,其實是安裝包解壓的過程。資源檔、二進位庫等解壓後直接儲存在本地,DEX檔案不僅僅解壓,會根據系統的運行環境,採用不同的處理方式,被處理成不同格式的檔案儲存體在本地,等待程式啟動調用,這樣就完成了應用的安裝過程。

 

總結:APK是Android安裝包,Dalvik和ART都是Android運行環境,ART是在高版本手機上替換Dalvik的。dex檔案是原始碼編譯後打包產生的檔案,是APK的一個組成部分,安裝時Dalvik將dex檔案中可執行檔class.dex解壓儲存在本地的檔案就是ODEX檔案。ART運行產生的檔案是OAT。

Dalvik與ART比較
(1)Dalvik和ART是Android平台實現的JAVA虛擬機器。用於解析DEX檔案、ODEX檔案和OAT檔案。
(2)ART解析模式是Android應用在安裝後,會進行一次先行編譯,將應用安裝包中的位元組碼轉換成機器語言儲存在本地。
(3)Dalvik解析模式是在應用安裝後,直接將位元組碼儲存起來,每次運行時,需要將代碼編譯成機器語言。
(4)運行程式時,Dalvik比ART慢,ART安裝後應用所佔的空間更大,安裝時間長。


ODEX檔案與OAT檔案比較:
(1)Dalvik將APK中的內容轉化成ODEX,ART將其轉化成OAT。
(2)ODEX需要通過JIT進行最佳化,提高運行效率。
(3)OAT包含DEX檔案和編譯出的本地機器指令檔案,比ODEX檔案佔用空間大,不需要經過處理就可以直接運行,運行速度快。


學習文章:http://mp.weixin.qq.com/s/37wjSQs1HWVfX0xL27NjBg

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.