前言
簡單瞭解一下PKMS的工做流程web
目錄
做用
PackageManagerService是安卓的核心服務之一,管理了跟Package相關的工做。緩存
大概流程圖
構造方法
第一階段
構造函數在第一階段的工做,主要是掃描並解析 ,XML 文件,將其中的信息保存到特定的數據結構中。數據結構
第二階段
掃描系統文件app
-
建立/system的子目錄,好比/system/framework、system/priv-app和/system/app等等
-
掃描系統文件,好比/vendor/overlay、/system/framework、/system/app等等目錄下的文件,對掃描到的系統文件作後續處理。
-
/system/frameworks:該目錄中的文件都是系統庫,例如:framework.jar、services.jar、framework-res.apk。不過 scanDirLI 只掃描APK文件,因此 framework-res.apk 是該目錄中惟一「受寵」的文件。 該目錄下全是默認的系統應用,例如:Browser.apk、SettingsProvider.apk 等。 /vendor/app:該目錄中的文件由廠商提供,即廠商特定的 APK 文件,不過目前市面上的廠商都把本身的應用放在 /system/app 目錄下。
第三階段
掃描/data/app和/data/app-private目錄下的文件編輯器
-
遍歷possiblyDeletedUpdatedSystemApps列表,若是這個系統App的包信息不在PMS的變量mPackages中,說明是殘留的App信息,後續會刪除它的數據。說明是存在於Data分區,不屬於系統App,那麼移除其系統權限。
-
遍歷mExpectingBetter列表,根據系統App所在的目錄設置掃描的解析參數,內部會將packageName對應的包設置數據(PackageSetting)添加到mSettings的mPackages中。掃描系統App的升級包,最後清除mExpectingBetter列表。
第四階段
-
若是當前平臺SDK版本和上次啓動時的SDK版本不一樣,從新更新APK的受權
-
若是是第一次啓動或者是Android M升級後的第一次啓動,須要初始化全部用戶定義的默認首選App。
-
-
把Settings的內容保存到packages.xml中,這樣此後PMS再次建立時會讀到此前保存的Settings的內容。
第五階段
準備階段ide
installer服務
在systemserver中installer服務做爲一個重要服務在:startBootstrapServices中啓動函數