PKMS的作用--《源码系列》

1,794 阅读2分钟

前言

简单了解一下PKMS的工作流程

目录

目录
目录

作用

PackageManagerService是安卓的核心服务之一,管理了跟Package相关的工作。

大概流程图

构造方法

第一阶段

构造函数在第一阶段的工作,主要是扫描并解析 ,XML 文件,将其中的信息保存到特定的数据结构中。

第二阶段

扫描系统文件

  • 创建/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。
  • OTA升级后的第一次启动,会清除代码缓存目录。
  • 把Settings的内容保存到packages.xml中,这样此后PMS再次创建时会读到此前保存的Settings的内容。

第五阶段

准备阶段

installer服务

在systemserver中installer服务作为一个重要服务在:startBootstrapServices中启动