Apk安裝和解析流程

APK的安裝流程.png
這篇文章來總結apk安裝流程,這篇文章分四個方面來描述這幾個流程。
1.Android中調起安裝介面
Android根據檔案型別MimeType來判斷是否彈起安裝頁面
- 常用的檔案型別
add("application/zip", "zip");
add("application/vnd.android.package-archive", "apk");
add("video/mp4", "mp4");
add("video/3gpp", "3gpp");
add("text/plain", "txt");
add("image/gif", "gif");
add("image/ico", "ico");
add("image/jpeg", "jpeg");
add("image/jpeg", "jpg"); - 安裝介面是PackageInstallerActivity
2.整個apk安裝流程
安裝圖解和過程描述

- 複製APK到/data/app目錄下,解壓並掃描安裝包。
- 資源管理器解析APK裡的資原始檔。
- 解析AndroidManifest檔案,並在/data/data/目錄下建立對應的應用資料目錄。
- 然後對dex檔案進行優化,並儲存在dalvik-cache目錄下。
- 將AndroidManifest檔案解析出的四大元件資訊註冊到PackageManagerService中。
- 安裝完成後,傳送廣播。
總體說來就兩件事情拷貝APK和解析APK,解析APK主要是解析AndroidManifest.xml,以便獲得它的安裝資訊。在安裝的過程中還會這個應用分配Linux用 戶ID和Linux使用者組ID(以便它可以在系統中獲取合適的執行許可權)。
3.涉及的三個程序
- PackageInstaller程序:PackageInstaller事實上是一個應用,它負責APK安裝以及解除安裝過程中與使用者的互動流程。
- SystemServer程序:該程序主要執行的是系統服務,APK的安裝、解除安裝和查詢都由PackageManagerService負責,它也是Android核心系統服務的一種,在SystemServer裡初始化系統服務的時候被啟動。
- DefaultContainerService程序:DefaultContainerService也是一個單獨的程序,它主要負責檢查和複製裝置上的檔案,APK的複製就是由DefaultContainerService來完成的。
4.apk解析流程
- Android不同型別
/system/framwork:儲存的是資源型的應用程式,它們用來打包資原始檔。
/system/app:儲存系統自帶的應用程式。
/data/app:儲存使用者安裝的應用程式。
/data/app-private:儲存受DRM保護的私有應用程式。
/vendor/app:儲存裝置廠商提供的應用程式。 - DEX的dexopt流程
dexopt操作實際上對DEX檔案在執行前進行一些優化,但是不同的虛擬機器操作有所不同。
Davlik:將dex檔案優化生成odex檔案,這個odex檔案的字尾也是dex,儲存在/data/dalvik-cache目錄下。
ART:將dex檔案翻譯生成oat檔案
以上就是對Android安裝流程的一個介紹。