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

android-PMS-包加载的顺序

Android PackageManagerService (PMS) 加载包的顺序遵循严格的系统初始化流程,核心步骤如下:

📦 包加载顺序流程

  1. 初始化系统核心资源
    PMS 构造函数中首先加载 Framework 资源(framework-res.apk)和系统核心库 (core libraries) 。

  2. 扫描系统预装应用目录
    按顺序扫描以下系统级目录:

    • /system/framework/(系统框架资源)
    • /system/app/(核心系统应用)
    • /system/priv-app/(特权系统应用)
    • /vendor/app/(供应商应用)
    • /oem/app/(OEM定制应用)
  3. 解析系统包信息
    读取 /data/system/packages.xml 历史安装记录,恢复已安装应用状态 。

  4. 扫描第三方应用目录
    最后加载用户安装的第三方应用:

    • /data/app/(用户安装的 APK)
    • /data/app-private/(受保护的应用) 。
  5. 构建应用信息表
    解析所有 APK 的 AndroidManifest.xml,构建全局的包信息树(PackageInfo)和组件注册表 。

⚙️ 关键机制说明

阶段操作内容
目录扫描使用 scanDirLI() 遍历目录,仅解析 .apk 文件,忽略其他类型文件 。
数据同步将扫描结果与 packages.xml 记录比对,更新 PMS 内部状态(Settings 类) 。
多用户处理为每个用户创建独立的数据目录(如 /data/user/0/),隔离应用数据 。
缓存优化解析结果缓存至内存,后续组件启动(Activity/Service)直接查询缓存 。

🔍 特殊场景处理

  • 系统更新:优先加载 /system 目录新版本覆盖旧版本 。
  • 安装新应用:触发独立流程(写入临时文件 → 校验签名 → 解析 → 移动至 /data/app) 。
  • 多架构支持:安装时根据 ABI 提取原生库(lib/arm64)到应用私有目录 。

💡 此顺序确保系统核心组件优先初始化,用户应用后加载,保障系统稳定性 。

引用链接:
1.Android PMS流程 - CSDN
2.深入PMS源码(一)—— PMS的启动过程和执行流程 - CSDN博客
3.android中pms安装应用流程 - 51CTO博客
4.Android PMS应用安装流程源码分析下篇-安装包校验及安装 - 掘金开发者社区
5.apk安装过程解析之理解包管理机制和PMS - CSDN下载
6.深入解析 Android PMS —— APK 安装与解析全流程 - CSDN博客
7.Android PMS开机结束标志 android开机启动流程 - 51CTO博客
8.Android PMS工作原理及启动流程 - 博客园
9.PMS安装APP流程解析 - 51CTO
10.Android系统-包管理机制(一)PMS服务启动 - CSDN博客
11.Android程序包管理机制解析和PMS启动流程分析 - CSDN博客
12.android PMS 基本使用安装apk - 51CTO博客
13.android PMS安装应用流程 android ams pms wms - 51CTO博客
14.Android PMS——pm命令解析(八) - CSDN下载
15.Android PMS 优化开机速度深度优化方案 - 掘金开发者社区
16.apk安装过程解析之理解包管理机制和PMS - CSDN下载
17.Android包管理机制(一)PackageInstaller的初始化 - 腾讯云
18.PMS-PKMS的初始化 - 掘金开发者社区
19.Springboot中application.yml、application.properties和bootStrap.yml的加载顺序 - wanshaohui
20.PMS-框架 - 掘金开发者社区

http://www.dtcms.com/a/305824.html

相关文章:

  • eBPF 赋能云原生: WizTelemetry 无侵入网络可观测实践
  • Ubuntu22.04.1搭建php运行环境
  • 【C++】类和对象(中)拷贝构造、赋值重载
  • 【目标检测】d-fine模型部署
  • 【25届数字IC秋招总结】面试经验12——海康威视
  • 【Kubernetes 指南】基础入门——Kubernetes 201(一)
  • 常见的其他安全问题
  • GitPython01-依赖排查
  • 大模型对比评测:Qwen2.5 VS Gemini 2.0谁更能打?
  • 制造业企业大文件传输的痛点有哪些?
  • JavaScript和小程序写水印的方法示例
  • github-idea新建文件就要弹窗提醒-如何关闭-2025.7.30
  • RustDesk 使用教程
  • 【C#】DevExpress.XtraEditors.MemoEdit memoEditLog控件讲解
  • Linux的小程序——进度条
  • 相亲小程序匹配与推荐系统模块搭建
  • 元码智能“大眼睛”机器人首发,智启生活新纪元!
  • Netty的Http解码器源码分析
  • Tdesign-React 模板面包屑如何放到 Header头部
  • 深度学习:预训练和warm up的区别
  • React 开发中遇见的低级错误
  • 线性代数常见的解题方法
  • JS中defineProperty/Proxy 数据劫持 vue3/vue2双向绑定实现原理,react 实现原理
  • 在 React + Ant Design 项目中实现文字渐变色
  • 技术速递|GitHub Copilot 的 Agent 模式现已全面上线 JetBrains、Eclipse 和 Xcode!
  • 国产化再进一步,杰和科技推出搭载国产芯片的主板
  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(5)
  • JavaScript数据类型
  • 高密度客流特征识别误差↓76%!陌讯多模态轻量化算法实战解析
  • Linux初始及常见指令使用