news 2026/7/11 13:32:41

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/7/2 11:40:01

全网首发!万字硬核解析:如何用向量引擎API构建企业级GPT-5.2与Sora2双模态中台(附完整源码+架构图)

摘要本文不仅仅是一篇教程。 更是一次对当下AI开发模式的深度反思与重构。 随着GPT-5.2、Sora2、Veo3等核弹级模型的相继发布。 传统的“单点直连”开发模式已经彻底崩塌。 面对高昂的维护成本、复杂的网络环境以及碎片化的接口标准。 我们迫切需要一种新的架构思想。 本文将通…

作者头像 李华
网站建设 2026/7/1 8:13:59

冥想第一千七百七十七天(1777)

1.周三,今天还是特别忙,中午忙工作休息的时间特别短。天气比前两天好多了。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

作者头像 李华
网站建设 2026/7/1 22:34:13

状态观测器深入浅出:从“为何需要”到“如何设计”

今天补充一下观测器的理论知识。 引言:我们为何需要“猜测”系统内部? 在理想的控制系统设计中,我们通常假设所有需要的状态变量(比如位置、速度、温度、化学浓度等)都可以通过传感器直接、精确地测量。然而,现实很骨感,很多时候我们无法直接获取这些关键状态: 物理限…

作者头像 李华
网站建设 2026/7/1 8:13:58

Flutter 三端应用实战:OpenHarmony 简易文本首尾字符对比器开发指南

一、为什么需要“简易文本首尾字符对比器”? 在 OpenHarmony 的文本校验、格式验证与结构分析场景中,同时观察首尾字符能提供独特的上下文洞察: 程序员:检查字符串是否被正确包裹(如 "..."、...、[...]、{..…

作者头像 李华
网站建设 2026/7/6 3:39:10

CMake工程指南(一):基础概念与核心优势

引言 在现代C/C开发中,构建系统是项目管理的核心。传统的构建方式往往面临跨平台兼容性差、配置复杂等问题。本教程将带你深入了解CMake——这个C/C开发的事实标准构建工具。 什么是构建系统? 构建(Build) 编译(Compil…

作者头像 李华
网站建设 2026/7/2 13:39:27

【算法分享】R树索引

在车联网、POI 分析、地理围栏、行政区划判断等业务中,我们经常会遇到一个非常基础、但极其高频的问题: 👉 给定一个经纬度点,它属于哪个(或哪些)多边形? 比如: 一个 GPS 点属于哪个…

作者头像 李华