android packages/apps 加入工程,深入安卓Package Manager和Package Installer

article/2025/9/27 9:52:53

我们每天都在安装和卸载APK(安卓应用程序包文件),或许一天会有好几次,但是你有想过下面问题吗?什么是Package Manager(包管理器)和Package Installer(程序安装包)?

APK文件保存在Android的哪个地方?

APK文件安装过程的细节是怎样的?

Package Manager(包管理器)是怎样保存数据的?

我应该去哪里找Package Manager和Package Installer的源码?

1、什么是Package Manager和Package Installer

PackageInstaller是安卓上默认的应用程序,用它来交互式地安装普通包文件。PackageInstaller提供了用户界面来管理应用或者包文件。PackageInstaller调用一个叫InstallAppProgress的activity来获取用户发出的指令。InstallAppProgress会请求Package Manager服务,然后通过indalld来安装包文件。源码提供在/packages/apps/PackageInstaller上。

Installd这个系统守护程序的首要角色是获取来自Package Manager服务的请求,而该请求是通过Linux套接字/dev/socket/installed获得的。

Installd使用管理员权限执行一系列的步骤来安装APK。参考:commands.c

Package Manger是一个实际上管理应用程序安装、卸载和升级的API。当我们安装APK文件时,Package Manager会解析APK包文件和显示确认信息。当我们点击OK按钮后,Package Manger会调用一个叫“InstallPackage”的方法,这个方法有四个参数,也就是uri、installFlags、observer和installPackagename。Package Manger会启动一个叫“package”的service(服务),现在所有模糊的东西会发生在这个service中。你可以在PackageInstaller源码中查看“PackageInstallAcitivity.java”和“InstallAppProgress.java”。Package Manger服务运行在系统服务进程中,而安装守护程序(installd)作为一个本地进程运行着,他们都在系统启动时开始运行。

2、APK文件保存在Android的哪个地方?预装程序(即相机,日历和浏览器等)保存在/system/app/中。

用户安装程序(APIDemo,Any.do等)保存在/data/app/中。

Package Manager创建数据目录/data/data//来保存数据库、shared preference、本地函数库和缓存数据。

你可能会看到apk文件和同一个APK的*.odex文件,而ODEX文件是完全不同的讨论和目的了。

3、APK文件安装过程的细节是怎样的?

下面的过程执行在Package Manger服务中。等待;

添加一个包文件到安装进程的队列中;

确定合适的地方来安装包文件;

复制apk文件到一个给定的目录下;

确定应用的UID;

请求installd守护程序进程;

创建应用目录和设置权限;

提取dex代码到缓存目录中;

解析packages.list、system、data和packages.xml的最新状态;

向系统发送广播消息,消息带有安装完成效果的名字Intent.ACTION_PACKAGE_ADDED:如果是更新,会带有新的(Intent.ACTION_PACKAGE_REPLACED)。

d09eee2e4c3d675628d423e07a663cfb.png

4、Package Manager(包管理器)是怎样保存数据的?

Package Manager保存应用程序的信息在/data/system目录下的三个文件里。下面的例子是从Android 4 ICS(Ice Cream Sandwich)模拟器提取出来的图片。

1. packages.xml:这个文件包含所有的权限和Packages/Applications。

.

.

.

.

.

.

.

.

.

.

.

.

.

这个xml文件包含两种信息,权限和package(application)。 权限是保存在标签里的。每个Permission(权限)有三个属性,即name、package和protection。Name属性包含权限的名字,也就是我们在AndroidManifest.xml所用的,Package属性表明权限所属的包。在大多数情况下,“android”是一个值,因为标签包含默认的权限,以及protection表明安全的等级。

package标签包含10个属性和一些子标签。Sr属性描述1name包名

2codePathAPK文件安装路径(/system/app/ 或 /data/app/)

3nativeLibraryPath本地函数库(*.so文件),默认路径/data/data//lib/

4flag存储ApplicationInfo标记[http://developer.android.com/reference/android/content/pm/ApplicationInfo.html](http://developer.android.com/reference/android/content/pm/ApplicationInfo.html)

5ft十六进制时间戳timestamp

6lt首次安装十六进制时间戳

7ut最后更新十六进制时间戳

8versionAndroidManifest.xml文件中的版本代码

[http://developer.android.com/guide/topics/manifest/manifest-element.html#vcode]

9sharedUserIdLinux用户ID名称,其他应用可查看此ID。与在AndroidManifest.xml中的定义一致[http://developer.android.com/guide/topics/manifest/manifest-element.html#uid]

10userIdLinux用户ID名称

子标签sigs 签名信息,count属性代表cert标签的数量。

cert 包含证书的key,index属性代表证书的全局索引,当新的证书安装时,我发现index会随着增加。

perms 包含开发者已经在AndroidManifest.xml中设置好的权限。

2. packages.list: 这是一个简单的文本文件,包含了包名、用户id、flag和数据目录,我找不到更加完美的描述了,但是我设想它可提供更快速的已安装包的查找,因为这个文件一直只保存重要的信息。com.android.launcher 10013 0 /data/data/com.android.launcher

com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox

com.android.contacts 10001 0 /data/data/com.android.contacts

com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin

3.packages-stoped.xml:这个文件包含了已经是停止状态的包的列表,停止状态的应用是不能接收任何的广播的。参考这个链接来了解更多关于停止状态应用的信息。http://yuki312.blogspot.in/2012/03/androidbroadcaststop.html

5、去哪里可以找到Package Manager和Package Installer的源码?


http://chatgpt.dhexx.cn/article/8X70O1vH.shtml

相关文章

RK3568平台开发系列讲解(安卓篇)PackageInstaller(应用安装)流程介绍

文章目录 <font color=#0990d9>一、PackageInstaller入口<font color=#0990d9>二、InstallStart<font color=#0990d9>三、InstallStaging<font color=#0990d9>四、PackageInstallerActivity<font color=#0990d9>五、InstallInstalling<font c…

Android9.0 PM机制系列(一)PackageInstaller初始化解析

前言 包管理机制是Android中的重要机制&#xff0c;是应用开发和系统开发需要掌握的知识点之一。 包指的是Apk、jar和so文件等等&#xff0c;它们被加载到Android内存中&#xff0c;由一个包转变成可执行的代码&#xff0c;这就需要一个机制来进行包的加载、解析、管理等操作&…

PackageInstaller源码分析(一)

本篇博客分析PackageInstaller源码目的是分析Android权限机制&#xff0c;Android App的权限在应用被安装时&#xff0c;用户选择授予或者拒绝。所以&#xff0c;分析Android权限机制源码的第一步分析应用程序安装时的行为。   此次阅读源码旨在解决的问题&#xff1a;Andro…

A*B problem(FFT)

A*B problem&#xff08;FFT&#xff09; 设两个多项式\(A(x)\)和\(B(x)\)&#xff0c;它们的系数镜像反转一下&#xff0c;得到的多项式是\(A(x)\)和\(B(x)\)。那么\(C(x)A(x)*B(x)\)和\(C(x)A(x)*B(x)\)的系数也是镜像反转的。这个&#xff0c;&#xff0c;感性理解一下吧。 …

【kissfft】使用过程中的一些坑总结

API kissfft有两套API&#xff0c; 一个是在kiss_fftr.h中 另一个在kiss_fft.h中 区别 Basic API还是kiss_fft.h里的&#xff0c;kiss_fftr.h是在kiss_fft.h的基础上封装了一层。 Basic API只有fft没有见到ifft&#xff1f;&#xff1f; 利用频域数据的共轭对称性可以使用…

2020山东大学计算机组成原理课程设计报告

《计算机组成原理》 课程设计报告 微指令模型机实现 班级&#xff1a; 姓名&#xff1a; 学号&#xff1a; 小组成员&#xff1a; 完成日期&#xff1a;2020.10.16 一、计算机的功能和用途 通过该课程设计的学习&#xff0c;我们设计一台模型机&#xff0c;该模型机运行…

创建react应用程序_创建多版本React应用程序的6个步骤

创建react应用程序 The React team said that there are no new features in React 17, but react17.0.0-rc.0 comes with the power to lazy load and deep integrate multiple versions of React. This no-feature is larger than any feature, which is a stepping stone fo…

你真的懂package.json吗

点击蓝字 「前端小苑」关注我 作者 | MasonEast 编辑 | 桔子酱 前言 在Node.js中&#xff0c;模块是一个库或框架&#xff0c;也是一个Node.js项目。Node.js项目遵循模块化的架构&#xff0c;当我们创建了一个Node.js项目&#xff0c;意味着创建了一个模块&#xff0c;这个模块…

《Linux编程》上机作业 ·004【文件I/O操作】

注&#xff1a;前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 友情提醒&#xff1a;仅供参考理解&#xff0c;请勿直接复制粘贴 友情提醒&#xff1a;仅供参考理解&#xff0c;请勿直接复制粘贴 友情提醒&#xff1a;仅供参考理解&#xff0c;…

CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了

来源丨机器之心 神经网络训练通常是 GPU 大显身手的领域&#xff0c;然而莱斯大学和英特尔等机构对 GPU 的地位发起了挑战。 在深度学习与神经网络领域&#xff0c;研究人员通常离不开 GPU。得益于 GPU 极高内存带宽和较多核心数&#xff0c;研究人员可以更快地获得模型训练的结…

用于基于 CNT 的射频辐射热计开发研究的 CPX-VF 探针台

我们会不时强调我们的低温探针台如何用于有趣的研究。我们最新的应用重点是阿克伦大学领导的工作&#xff0c;并发表在上个月的IEEE 微波理论与技术汇刊上。与来自美国陆军和 Nano-C Inc.&#xff08;马萨诸塞州 Westwood 的纳米结构碳材料及其应用开发商&#xff09;的研究人员…

ProJet 3510 CPX蜡模3D打印机在珠宝行业成功应用

传统的首饰设计是一个细致和增量的过程。传统设计从设计师的构图开始&#xff0c;一旦草图被批准后,就会雕刻成模型&#xff0c;如果蜡模没有足够接近原始草图或未能满足客户的期望&#xff0c;必须重做,这样会浪费大量的时间。使用ProJet 3510 CPX专业蜡成型3 d打印机&#xf…

基于 CNT 的射频辐射热计开发研究的 CPX-VF 低温探针台

有时&#xff0c;我们喜欢强调我们的低温探针台如何用于有趣的研究。我们最新的应用重点是由阿克伦大学领导并发表在上个月的IEEE Transactions on Microwave Theory and Techniques 上的工作。UA 的 ZEN-Lab 的Michael Gasper 和 Ryan Toonen 博士与美国陆军和 Nano-C Inc.&am…

Parker驱动器维修COMPAX控制器维修CPX0200H

COMPAX控制器&#xff1a;由不同的模拟功率控制信号&#xff0c;由MOSFET IC级驱动器GND/PGND&#xff08;功率接地&#xff09;&#xff09;的信号控制&#xff0c;则应分别接地。使用IC的小信号部分的控制IC&#xff0c;SGND信号与功率地之间的连接点。合理的方法是地信号地返…

用于 CPX、CPX-VF 和 CRX-VF 探针台的新手提箱选项

如果您正在寻找一种简单的方法来将样品从手套箱、干燥箱或其他惰性气氛容器转移到高真空、低温探测环境&#xff0c;您可能会感兴趣&#xff1a;一个新的专用手提箱 (PS-SC- CPX) 与可安装在我们的CPX、CPX-VF或CRX-VF探针台上的负载锁定组件 (PS-LL-CPX) 一起使用。 该手提箱具…

GE IC697CPX935 CPU模块PDF帅

IC697CPX935 是 GE 自动化和控制公司制造的具有三个内置串行端口的单槽 PLC CPU。它能够对系统进行实时控制。使用 VMEC.1 格式&#xff0c;IC697CPX935 可以通过安装在机架上的背板与不同的“智能选项”模块进行通信。该设备通过三位运行/停止控制开关或连接到运行适当软件的计…

micropython仿真器_microbit/cpx 的 python模拟器:Device Simulator Express

Device Simulator Express是一个 VSCode 的编程扩展,使用它无需硬件就能对 Circuit Playground Express(CPX)或 BBC micro:bit 仿真和调试python程序,此外还可以通过串口观察设备的输出。Device Simulator Express 和 makecode 中的设备模拟器功能类似,但它是一个 python 程…

Win10强制更新关闭方法

Win10自动更新怎么永久关闭&#xff1f;有效的Win10强制更新关闭方法 之前小编为大家分享过一些Win10彻底关闭Windows Update自动更新的方法&#xff0c;主要是通过一些如设置流量计费或借助一些专门的小工具来实现&#xff0c;但往往会发现&#xff0c;Win10自动更新就像打不死…

Win10强制更新禁不掉的解决方法

现况 2018年8月之后安装或者更新的win10&#xff0c;现在会出现无法禁用windows update的情况&#xff0c;表现为&#xff1a; 在服务里禁用了windows update服务&#xff0c;后续服务仍能正常启动强制更新。设置“登录”和“恢复”选项卡依然无效。在设置里关闭更新选项无效…