核心内容摘要
《召唤魅魔竟是妈妈来了第二季》完结:当异界诱惑遇上家庭温情,这场“惊”喜你收到了吗?
PackageManagerServicePackageManager一个接口而已它的实现类是ApplicationPackageManager但是当你去研究ApplicationPackageManager的源码的时候你会发现它的功能其实都是通过一个mPM的变量完成的它的类型是IPackageManager类型它就是PackageManagerService在客户端的一个代理通过这个代理客户端可以调用到PackageManagerService中的一些方法如获取某一个应用的版本号其实版本号这些信息最终都是保存在PackageManagerService中的我们只有通过mPM这个代理才能拿到这些信息。
提供一个ApplicationInfo的所有信息提供权限相关信息提供一个安装包信息安装、卸载、更新app功能PackageManagerService主要是用来处理apk的安装卸载和应用程序信息的获取的。
完成诸如权限校捡(checkPermission,checkUidPermission)Apk meta信息获取(getApplicationInfo等)四大组件信息获取(query系列方法)等重要功能PackageInstallerService管理应用的安装过程。
Installer 对app进行操作安装、卸载、更新、迁移重要目录/data/systempackages.xml:记录apk的permissions,flags,ts,version,uesrid等信息这些信息主要通apk的AndroidManifest.xml解析获取当系统进行程序安装、卸载和更新等操作时均会更新该文件。
packages-backup.xml : 备份文件packages-stopped.xml : 记录被用户强行停止的应用的Package信息packages-stopped-backup.xml : pakcages-stoped.xml文件的备份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构造方法中处理配置文件
先读取packages.xml文件内容解析并保存在成员变量mSettings中。
扫描设备中的几个分区目录下的应用文件把扫描结果保存到PMS的mPackages中。
这记录的是当前系统中的应用状态信息
后面就是对两次的应用状态信息进行比对、重新调整、扫描特定目录。
最后将应用信息重新写回packages.xml文件APK的安装过程将apk文件复制到程序目录下(/data/app/)解压并扫描安装包为应用创建数据目录(/data/data/package name/)、提取dex文件到指定目录(/data/delvik-cache/)、修改系统包管理信息。
PMS 处理 APP 安装PackageHandle处理安装消息。
PMS通过向PackageHandle发送消息驱动APK复制和安装。
复制APK。
绑定DefaultContainerService复制比较耗时运行在另一个进程。
安装APK检查在安装前检查是否环境的可靠如果不可靠会清除复制的APK文件。
安装installPackageTracedLI其内部会调用PMS的installPackageLI方法进行APP安装。
收尾处理安装后操作如果安装不成功删除掉安装相关的目录与文件。