前言
简单了解一下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中启动函数