[笔记] 应用安装过程梳理

article/2025/10/10 18:20:15

一、概述

1、四种应用安装场景
(1)系统自安装:每次开机启动时,都会预安装系统自带的APK文件,没有安装界面;
(2)应用市场安装:从小米应用商店(com.xiaomi.market)、Google Play(com.android.vending)等,下载 APK 后,自动安装;
(3)adb命令安装:使用 adb 工具,安装 APK:$ adb install xxxxx.apk,没有安装界面;
(4)第三方安装:使用文件管理器(com.miui.packageinstaller 或 com.google.android.packageinstaller 等),安装下载好的 APK 文件。

2、PackageInstaller源码所在位置
PackageInstaller 是系统内置的应用程序,用于安装和卸载应用。

  • 在 Android 9 及更低版本中,软件包安装和权限控制功能都包含在 PackageInstaller 软件包(packages/apps/PackageInstaller)中
  • 在 Android 10 及更高版本中,权限控制功能位于单独的 PermissionController 软件包(packages/apps/PermissionController)中
    PermissionController、PackageInstaller 这两个软件包在 Android 10 及更高版本中的位置如下图所示:
    在这里插入图片描述
    (1)在 Android 9 及更低版本中
    软件包安装、权限控制功能源码路径:packages/apps/PackageInstaller
    (2)在 Android 10 及更高版本中
    权限控制功能源码路径:packages/apps/PermissionController/
    安装器源码路径:frameworks/base/packages/PackageInstaller/

3、应用安装涉及的目录
进入手机文件目录:$ adb shell,应用安装所涉及到的主要目录如下:
(1)system 分区
– /system/framework:主要保存的是资源型的应用程序,他们用来打包资源文件。
– /system/app:主要是一些系统级应用,比如:日历、天气、电话等。
– /system/priv-app:主要是系统自带的应用程序,获得 adb root 权限后,才能进行删除。
(2)data 分区
– /data/app:主要是用户安装应用的目录,应用安装时,会把 .apk 文件复制到此目录下。
– /data/data:主要存放各个应用程序相关的数据,包括:第三方应用、系统应用的数据。
– /data/dalvik-cache:主要存放 .apk 中的 dex 文件(注:dex文件是 dalvik 虚拟机的可执行文件)。
– /data/system:主要存放安装应用的一些重要文件,如下:
– /data/system/package.list:维护应用包列表,包含应用具体的包名和默认存储路径(如:/data/data/com.xxx.xxx)等信息。
– /data/system/package.xml:维护应用包基本信息,包含应用的权限信息、用户群组信息等,这些信息主要通过解析 APK 的AndroidManifest 文件获取,解析完 apk 后,将更新信息写入这个文件并保存到 flash,下次开机时直接从里面读取相关信息,并添加到内存相关列表中。当有APK升级、安装、删除时,会更新这个文件。
(3)vendor 分区
– /vendor/app:主要保存设备厂商提供的应用程序。
(注:每个应用都要有一个userId,因为 Android 在系统设计上,把每个应用当作 Linux 系统上的一个用户对待,这样就可以利用已有的 Linux 用户管理机制,来设计 Android 应用,比如:应用目录、应用权限、应用进程管理等。)

## 说明:
手机上存储 sdcard分区 —> /storage/self/primary/ —> /storage/emulated/0/,即:通过软链接的方式,/sdcard/目录与/storage/emulated/0/目录是完全一样的。备注:应用安装时,点击 xxxx.apk 文件,随后的应用安装准备阶段,就是把该 apk文件从 /sdcard/ 目录拷贝到了 data/data/com.miui.packageinstaller/cache/package××××.apk;
后面点击 “安装” 按钮,就开始从此处读取文件,并写到临时文件 data/app/vmdl×××××.tmp/PackageInstaller/ 目录;
当完全拷贝结束后,再从 data/app/vmdl×××××.tmp/PackageInstaller/ 读取文件,写到 data/app/~~××××==/××××==/base.apk 。另外,/storage/emulated/0/data/media/0/ 目录也是对应关系。

二、Android应用的入口Activity

PackageInstaller(安装器)是一个系统应用,因此也属于一个Android应用。那么如何确定一个应用程序的入口Activity呢?
主要是根据AndroidManifest.xml中的配置。
1、有默认Activity的应用
找到 intent-filter(意图过滤器),当出现如下代码:


http://chatgpt.dhexx.cn/article/V0DYB7Pn.shtml

相关文章

如何在win10+VS2017环境下新建一个简单的WDF示例程序

上一课我们在win10系统VS2017开发环境下搭建了WDK驱动程序开发环境的搭建,详见我的博客【如何在win10VS2017环境下安装USB驱动开发套件WDK】,今天我们来尝试建立一个最简单的KDM示例工程。 提前说明:本博客所建立的示例工程的源码&#xff0…

WDF驱动安装方法

WDF驱动的安装方法: 编译好的SYS文件、INF文件、另外还需要一个WdfCoInstaller01009.dll文件,对应的WDK版本是7600.16385.1这个版本,其中WdfCoInstaller01009.dll文件位于“WDK安装目录” \redist\wdf\x86下,这个动态链接库文件是WDF驱动框架在安装时所必…

WRF模式

随着生态文明建设和“碳中和”战略的持续推进,我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域(生态、水资源、风资源及碳中和等问题)的主要驱动因素,合理认知气候变化有利于解释生态环境变化机理及过…

WDF VIOLATION 你的电脑遇到问题,需要重新启动

文章目录 问题描述问题原因解决方法 【写在前面】作为一名还未毕业的研究僧,天天泡实验室是常有的事。学校的电脑是惠普的。我在上面装了Win10的系统。不久之前,电脑重启后竟然蓝屏了,无法进入系统,蓝屏上显示的是WDF VIOLATION 你…

WDS服务

二:WDS服务 预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存…

基于WDF驱动模型使用WFP框架进行网络层数据修改

一、WDF驱动模型介绍: WDF驱动模型是微软推出的驱动程序开发环境,是Vista及其以后OS的驱动模型。在visia之前win2000之后用的是WDM驱动模型。WDF是以WDM为基础进行了建模和封装,降低了开发难度。WDF将驱动程序与操作系统内核之间进行了分离&a…

从零开始学习Windows WDF驱动程序开发

从零开始学习Windows WDF驱动程序开发 ▼ 目录: 1. 第一部分 编译安装测试一个简单的WDF驱动程序 1.1 编译安装测试 1.2 Windows驱动开发就是要开发出INF文件和SYS文件 1.3 简单介绍下编译脚本 1.4 Windows应用程序如何访问一个设备 2. 第二部分 了解WDF框架并且开发…

亲手解剖WDF驱动

亲手解剖WDF驱动 创建一个WDF驱动(non-pnp) WDF驱动其实是微软公司提供的一套驱动开发的框架。 有了这个框架之后,开发驱动会简单一些。WDF本身是从WDM基础上封装而成的。WDF里面封装了很多对象,如WDFDRIVER等。如果要学习使用WDF来开发驱动,…

windows驱动开发4:WDM、WDF等驱动基本概念

一、WDM 1、WDM WDM是英文Windows Driver Model(WDM)的缩写,是Windows98和Windows2000使用的新的驱动程序设计规范。使用WDM使得硬件驱动程序更加稳定,让操作系统对硬件更加有效地控制硬件。 除了定义一个驱动程序与操作系统连接的标准接口以外&#…

WDF开发详解

原文地址:https://blog.csdn.net/lang_eva/article/details/109676808 WDF开发详解 添加设备:hdwwiz KMDF驱动程序框架 KMDF 驱动程序框架由对象和事件回调例程构成。KMDF 框架中所有的事物都由对象表示,各种事件处理都由事件回调例程来完…

windows驱动开发-WDF编程

文章目录 前言WDF编程前的准备工作WDF编程创建驱动对象创建设备对象设备对象的回调函数链表操作驱动的测试代码 其他 前言 注:本文的完整代码见仓库 18-WDF-reflect 代码参考自:junjiexing/libredirect 我不是从事驱动开发的专业人员,打酱…

javaWeb图书管理系统

javaWeb图书管理系统 1.项目简单介绍 a.项目用到的技术 IDE: Intellij IDEA语言:java,html ajax,js数据库:Mysql数据库可视化: navicatweb服务器:Tomcat框架:(mybatis&#xff0…

基于Java基础的图书管理系统

文章目录 前言一、前期准备二、需求分析三、核心代码开发1、 model 层1.1、 Book 类1.2、 User 类1.3、 NormalUser 类1.4、 Admin 类 2、 service 层2.1、 IOOperation 接口2.1、 AddBook 类2.2、 DeleteBook 类2.3、 ReplaceBook 类2.4、 ListAllBook 类2.5、 BorrowBook 类2…

图书馆管理系统 Java

目录 要求: 代码 Operate接口 Book类 Reader类 BookList类 ReadList 类 Infor类 InforList类 main 功能实现 改进 错误 总结 要求: 为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作&a…

图书管理系统【Java实现】

目录 一、项目简介二、项目演示1.登录界面2.图书借阅信息管理界面3.新增图书借阅信息界面4.修改图书借阅信息界面5.删除图书借阅信息界面 三、项目流程1.准备开发环境(1)下载所需文件(2)在IDEA中配置Maven(3&#xff0…

Java开发实现图书管理系统(超详细)

本文用Java代码实现图书代码管理系统,有些地方可能会有纰漏,希望各位大佬鉴赏!! 文章目录 文章目录 一、Java实现图书管理系统 1.1创建book包 二、创建图书管理系统的操作包 2.1创建Operation接口 三、创建User包 3.1创建User类 四…

Java实现图书管理系统(新手友好)

图书管理系统 一、初识工作二、具体实现三、代码book包Book类BookList类 operation包IOperation接口AddOperationBorrowOperationDelOperationDisplayOperationExitOperationFindOperationReturnOperation user包AdminUserNormalUserUser Main 一、初识工作 我们首先要清楚的是…

图书管理系统【java】

目录 🥇1.设计背景 🔎2.设计思路 🔑3.book包 📗3.1 Book类的实现 📕3.2 BookList类的实现(书架) 🔑4.user包 📙4.1 User类的实现 📒4.2 AdminUser(管理员&#x…

图书管理系统(Java)

📚 一、前言1.1整体框架 二、book包2.1Book2.2BookList 三、user包3.1、User3.2、Adminuser3.3、Normaluser 四、Operation包4.1、IOperation接口4.2、AddOperattion4.3、ShowOperation4.4、FindOperation4.5、DelOperation4.6、BorrowOperation4.7、ReturnOperatio…

图书管理系统(Java简单版)(完整代码+详解)

目录 详解: BookList类: InOperation接口 User类(父类) 和 Main类(这俩要一起看) 完整代码 book包 Book类 BookList类 operation包 AddBook类 BorrowBook类 DeleteBook类 FindBook类 Pr…