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

一、概述

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的应用
找到 inte

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值