news 2026/5/1 6:49:40

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/4/14 13:32:15

点亮 LED 灯实验(平台总线)

1. platform_device.c - 平台设备定义 #include <linux/module.h> #include <linux/platform_device.h> #include <linux/io.h>#define DRIVER_NAME "simple_led"// LED资源&#xff1a;寄存器地址和大小 #define PMU_GRF_BASE (0xFDC200…

作者头像 李华
网站建设 2026/4/20 13:29:15

Python 金融高级学习计划(金融专业学生版)|务实详解

目录 核心前提 阶段 1&#xff1a;金融数据库与批量数据工程&#xff08;第 1-2 周&#xff09; 核心目标 每周时间分配&#xff08;8 小时 / 周&#xff09; 核心知识点&#xff08;附金融场景 代码示例&#xff09; 实操任务&#xff08;适配《量化投资》课程作业&…

作者头像 李华
网站建设 2026/5/1 5:50:42

混凝土裂缝里灌浆就像给地球打针,这种非饱和多孔介质里的流体运动总让人头大。今天咱们用COMSOL扒开这个黑箱,手把手造个会呼吸的地质模型

COMSOL多孔介质非饱和注浆数值模拟。 针对多孔介质非饱和注浆问题。 应用有限元计算软件COMSOL Multiphysics建立多孔介质非饱和注浆数值模型。 研究多孔介质中非饱和注浆&#xff0c;浆液扩散规律&#xff0c;并分析不同浆液性质、注浆压力、多孔介质特性对注浆扩散过程的影响…

作者头像 李华
网站建设 2026/4/18 5:19:26

【值得收藏】RAG+多代理协作:大模型如何革新药物发现流程

文章介绍CLADD框架&#xff0c;一种基于RAG技术和多代理协作的药物发现系统。该系统利用通用LLM和知识图谱动态整合生物医学知识&#xff0c;无需领域微调&#xff0c;展现出卓越的灵活性。通过规划团队、知识图谱团队和分子理解团队的协作&#xff0c;CLADD在分子描述、靶点预…

作者头像 李华
网站建设 2026/4/18 17:01:10

Python内置函数有哪些?

Python内置函数是无需手动导入任何模块&#xff0c;开箱即可使用的基础函数&#xff0c;由Python解释器原生提供&#xff0c;覆盖数据类型转换、序列操作、输入输出等核心场景。那么Python内置函数有哪些?以下是详细介绍。‌abs()‌–返回数字的绝对值。‌all()‌–检查可迭代…

作者头像 李华