当前位置: 首页 > news >正文

Android S(31) PMS 服务启动原理

1、PMS 启动

SystemServer进程启动引导服务时启动PMS,方法调用SystemServer.run()-startBootstrapServices,通过 PackageManagerService.main中 new PackageManagerService()实例化PackageManagerService对象。

 

 PMS 的主要作用是解析 system/和 data/  目录下的apk 文件,缓存apk 的AndroidManifest.xml 信息,以供AMS 调用,整个耗时占开机时间的70% 左右。

2、PMS 扫描APK 

在PackageManagerService的构造函数中,

mDirsToScanAsSystems是存放system/*/*.apk 目录, 再检查data/*/*.apk 

 

getOverlayFolder()即system/overlay/*.apk ,一些手机定制商会在这个目录预置可卸载的apk,随机出厂。

getPrivAppFolder() 即 system/priv-app/*.apk 存放要求系统权限更高的系统APP比如Settings.apk,getAppFolder()即 system/app/*.apk 存放普通的系统app,如Camera。

 

mAppInstallDir 就是APP安装目录即data/appp/,这里是用户下载安装的目录。

3、PMS 解析APK 

接着就是正式解析APK, scanDirTracedLI()->scanDirLI() 下面用流程图表示接下来的流程。

 

进入ParsingPackageUtils#parseBaseApplication()方法,这里解析了AndroidManifest.xml。

 包解析完之后返回值为ParallelPackageParser.ParseResult,这个存入ParallelPackageParser的mQueue,到scanDirLI()方法继续下一步,

addForInitLI()->commitReconciledScanResultLocked()->commitPackageSettings(),

把ParseResult 返回值为AndroidPackage。最后保存在 PMS 的mPackages,key是包名,value是AndroidPackage类型的信息。

 这个是Android 11 版本新改的,反射的话要注意版本区分了。

 10 和10以前 value类型是PackageParser.Package的。

 

相关文章:

  • 网站发语音功能如何做/微信群推广平台有哪些
  • c2c网站有哪些/清远市发布
  • 大连建设银行官网招聘网站/产品推广方案ppt模板
  • 如何做百度的网站/网站一般怎么推广
  • 青岛哪个网站建设公司价格低还能好一些/百度app营销软件
  • 网站建设优化服务价格/百度提交入口的网址
  • 错误: 找不到或无法加载主类 com.example.demo.DemoApplication 解决方案
  • [附源码]Python计算机毕业设计Django人员信息管理
  • linux网络编程epoll详解
  • 如何在 Spring 或 Spring Boot 中使用键集分页
  • gcd区间 (ST表)(爱思创算法四)
  • 轻量化神经网络(移动设备上的神经网络)的整体框架
  • React基础汇总
  • WEB前端网页设计 HTML CSS 网页设计参数 - 【浮动与定位】
  • Docker:rabbitmq启动镜像后访问15672端口无法显示管理界面问题解决
  • 【论文精读8】MVSNet系列论文详解-UCS-Net
  • 大数据hadoop_HDFS概述(1)
  • Java多线程之:队列同步器AbstractQueuedSynchronizer原理剖析