news 2026/5/20 2:21:58

PackageManagerService 简析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PackageManagerService 简析

PackageManagerService

  • PackageManager:一个接口而已,它的实现类是ApplicationPackageManager,但是当你去研究ApplicationPackageManager的源码的时候,你会发现,它的功能其实都是通过一个mPM的变量完成的,它的类型是IPackageManager类型,它就是PackageManagerService在客户端的一个代理,通过这个代理客户端可以调用到PackageManagerService中的一些方法,如获取某一个应用的版本号,其实版本号这些信息最终都是保存在PackageManagerService中的,我们只有通过mPM这个代理才能拿到这些信息。
    • 提供一个ApplicationInfo的所有信息
    • 提供权限相关信息
    • 提供一个安装包信息
    • 安装、卸载、更新app功能
  • PackageManagerService:主要是用来处理apk的安装,卸载和应用程序信息的获取的。完成诸如权限校捡(checkPermission,checkUidPermission),Apk meta信息获取(getApplicationInfo等),四大组件信息获取(query系列方法)等重要功能
  • PackageInstallerService:管理应用的安装过程。
  • Installer :对app进行操作,安装、卸载、更新、迁移

重要目录

/data/system:

  1. packages.xml:记录apk的permissions,flags,ts,version,uesrid等信息,这些信息主要通apk的AndroidManifest.xml解析获取,当系统进行程序安装、卸载和更新等操作时,均会更新该文件。
  2. packages-backup.xml : 备份文件
  3. packages-stopped.xml : 记录被用户强行停止的应用的Package信息
  4. packages-stopped-backup.xml : pakcages-stoped.xml文件的备份
  5. packages.list : 记录非系统自带的APK的数据信息,这些APK有变化时会更新该文件

应用安装涉及到的目录:

  • system/app:系统自带的应用程序,无法删除
  • system/priv-app: 比/system/app权限优先级更高,可以拿到ApplicationInfo.PRIVATE_FLAG_PRIVILEGED特殊权限
  • vendor/app: odm或者oem厂商预制系统App目录
  • vendor/priva-app: 同上
  • data/app:用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录
  • data/data:存放应用程序的数据。无论是系统App还是普通App,App产生的用户数据都存放在/data/data/包名/目录下。
  • data/user/:App数据目录
  • data/dalvik-cache:将apk中的dex文件安装到dalvik-cache目录下。于32位和64位的机器码有所区别,因此这个目录下还会通过子文件夹对oat文件进行分类。
    • /data/dalvik-cache/arm/
    • /data/dalvik-cache/arm64/

PMS构造方法中处理配置文件

1、先读取packages.xml文件内容,解析并保存在成员变量mSettings中。
2、扫描设备中的几个分区目录下的应用文件,把扫描结果保存到PMS的mPackages中。这记录的是当前系统中的应用状态信息
3、后面就是对两次的应用状态信息进行:比对、重新调整、扫描特定目录。
4、最后将应用信息重新写回packages.xml文件

APK的安装过程

  • 将apk文件复制到程序目录下(/data/app/),解压并扫描安装包
  • 为应用创建数据目录(/data/data/package name/)、提取dex文件到指定目录(/data/delvik-cache/)、修改系统包管理信息。

PMS 处理 APP 安装

  • PackageHandle,处理安装消息。PMS通过向PackageHandle发送消息驱动APK复制和安装。
  • 复制APK。绑定DefaultContainerService,复制比较耗时,运行在另一个进程。
  • 安装APK
    1. 检查:在安装前检查是否环境的可靠,如果不可靠会清除复制的APK文件。
    2. 安装:installPackageTracedLI其内部会调用PMS的installPackageLI方法,进行APP安装。
    3. 收尾:处理安装后操作,如果安装不成功,删除掉安装相关的目录与文件。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 14:56:27

Java手办商城源码:盲盒玩法全解析

以下是一套基于Java的手办商城盲盒玩法源码解析,涵盖核心逻辑、技术实现与关键代码示例: 一、核心模块设计 商品模型 手办类(Figure):包含名称、描述、图片、市场价、盲盒价等属性。盲盒类(BlindBox&…

作者头像 李华
网站建设 2026/5/18 11:43:12

关于export和export default 以及export * from

文章目录关于export和export default 以及export * from ./login1.export default2.export3 export * from ./login关于export和export default 以及export * from ‘./login’ 1.export default export default :一个文件里只能有一个,它是整个文件的…

作者头像 李华
网站建设 2026/5/14 6:44:24

智慧景区小程序一站式解决方案,助力旅游行业数字化转型

温馨提示:文末有资源获取方式随着移动互联网的普及和游客消费习惯的升级,传统的景区运营模式正面临深刻变革。一款功能全面、部署快捷的智慧旅游景区小程序,已成为提升景区管理水平、优化游客体验、拓展多元收入的关键工具。我们为您推荐一款…

作者头像 李华
网站建设 2026/5/14 13:30:26

在Linux中如何查看文件夹大小?

在Linux系统运维中,查看文件夹大小是高频基础操作,不管是清理磁盘空间、定位大文件目录,还是监控服务器存储占用,都需要精准获取目录的磁盘使用情况。那么Linux怎么查看文件夹大小?具体请看下文。方法一:使用du命令du…

作者头像 李华
网站建设 2026/5/16 17:32:07

录屏扒代码、截图改网页!Kimi K2.5把「视觉x代码」玩明白了

Kimi K2.5这次升级简化了人类的工作流程,或许,在Agent时代写简历都不用长篇大论了,一句“精通Kimi”就够了(doge)。说真的,AI圈现在恨不得睁眼闭眼就变天,产品一个接一个,难怪网友都…

作者头像 李华