packagemanagerservice学习记录基于7.1.1源码

author author     2022-09-16     659

关键词:

 

参考:

http://blog.csdn.net/innost/article/details/47253179

http://blog.csdn.net/gaugamela/article/details/52619720

感谢文章作者

 

PackageManagerService是Android系统服务,它负责系统中Package的管理,应用程序的安装、卸载、信息查询等。

 

技术分享

 

上图主要展示了PackageManagerService及客户端的通信方式,以及相关类的继承关系。

 

1、PMS的启动

PMS由SystemServer创建,SystemServer调用了PMS的main函数创建PMS实例,

之后依次调用PMS的

isFirstBoot函数,判断本次是否为初次启动。当Zygote或SystemServer退出时,init会再次启动它们,所以这里的FirstBoot是指开机后的第一次启动

performBootDexOpt函数,做dex优化。dex是Android上针对Java字节码的一种优化技术,可提高运行效率

systemReady函数,通知PMS,系统进入就绪状态

主要分析main函数 :

技术分享

PMS在其构造方法中扫描如下目录中的apk文件,解析apk中的清单文件,并创建相应的数据结构保存扫描到package信息,组件信息,权限信息等:

下面具体分析PMS构造方法中扫描APK文件的过程:

A、调用Setting的readLPw方法解析/System/目录下的xml文件,并保存解析的信息,一共有5个文件:

packages.xml: PKMS扫描完目标文件夹后会创建该文件。当系统进行程序安装、卸载和更新等操作时,均会更新该文件。该文件保存了系统中与package相关的一些信息

packages-backup.xml和packages.xml为一组,用于描述系统中所安装的Package的信息,其中backup是临时文件。PKMS先把数据写到backup中,信息都写成功后再改名成非backup的文件。其目的是防止在写文件过程中出错,导致信息丢失。

packages.list:描述系统中存在的所有非系统自带的APK(应用级,即UID大于10000)的信息。当这些程序有变动时,PKMS就会更新该文件

packages-stopped.xml:从系统自带的设置程序中进入应用程序页面,然后在选择强制停止(ForceStop)某个应用时,系统会将该应用的相关信息记录到此文件中。也就是该文件保存系统中被用户强制停止的Package的信息

packages-stopped-backup.xml和packages-stopped.xml为一组,用于描述系统中强制停止运行的pakcage的信息,backup也是临时文件。如果此处存在该临时文件,表明此前系统因为某种原因中断了正常流程

B、解析完XML之后,就是一次扫描各个文件夹中的apk文件,具体会扫描如下5个目录:

/system/frameworks:该目录中的文件都是系统库,例如framework.jar、services.jar、framework-res.apk,不过scanDirLI只扫描APK文件

/system/app:该目录下全是默认的系统应用,例如Browser.apk、SettingsProvider.apk等

/vendor/app:该目录中的文件由厂商提供,即厂商特定的APK文件,不过目前市面上的厂商都把自己的应用放在/system/app目录下

/data/app : 该目录为第三方APK目录,安装的第三方apk都会拷贝到这里

/data/app-private : 安装的受DRM保护的APK文件(这个不理解)

a) PMS的构造方法调用scanDirLI()方法扫描以上文件夹,通过后缀判断以上目录是否有.apk文件,如果则调用scanPackageLI()方法;

b) scanPackageLI()方法中会实例化一个PackageParser对象,并调用PackageParser的parsePackage函数解析apk;

c) 是不解析完apk信息之后,会和A步中解析到的XML中保存的apk信息做对比,以确定是否需要升级;

C、

 

android的packagemanagerservice10.0源码解读(androidmanifest.xml解析)

Android判断Activity是否在AndroidManifest.xml里面注册(源码分析)Android的PackageManagerService10.0源码解读Android的ActivityManagerService(简称AMS)的源码分析Android的PackageManagerService10.0源码解读PackageManagerService简称PKMSPKMS简介Pa 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

文章大纲引言一、PackageManagerService概述二、PackageManagerService体系结构概述三、SystemServer进程启动PKMS服务1、com.android.server.SystemServer#startBootstrapServices触发PKMS服务启动2、com.android.server.pm.PackageManagerService#main 查看详情

android的packagemanagerservice10.0源码解读(androidmanifest.xml解析)(代码片段)

Android判断Activity是否在AndroidManifest.xml里面注册(源码分析)Android的PackageManagerService10.0源码解读Android的ActivityManagerService(简称AMS)的源码分析Android的PackageManagerService10.0源码解读PackageManagerService简称PKMSPKMS简介Pa 查看详情

android的packagemanagerservice10.0源码解读(androidmanifest.xml解析)(代码片段)

Android判断Activity是否在AndroidManifest.xml里面注册(源码分析)Android的PackageManagerService10.0源码解读Android的ActivityManagerService(简称AMS)的源码分析Android的PackageManagerService10.0源码解读PackageManagerService简称PKMSPKMS简介Pa 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

文章大纲引言一、PackageManagerService概述二、PackageManagerService体系结构概述三、SystemServer进程启动PKMS服务1、com.android.server.SystemServer#startBootstrapServices触发PKMS服务启动2、com.android.server.pm.PackageManagerService#main触发PMKS对象创建并注册... 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

文章大纲引言一、PackageManagerService概述二、PackageManagerService体系结构概述三、SystemServer进程启动PKMS服务1、com.android.server.SystemServer#startBootstrapServices触发PKMS服务启动2、com.android.server.pm.PackageManagerService#main触发PMKS对象创建并注册... 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

文章大纲引言一、PackageManagerService概述二、PackageManagerService体系结构概述三、SystemServer进程启动PKMS服务1、com.android.server.SystemServer#startBootstrapServices触发PKMS服务启动2、com.android.server.pm.PackageManagerService#main触发PMKS对象创建并注册... 查看详情

android设计模式笔记-packagemanagerservice信息树

...,一个和Intent息息相关的服务也被注册了,这个服务就是PackageManagerService, 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

...大纲引言一、PKMS遍历安装系统目录下的App1、Apk的结构2、PackageManagerService#main方法触发App安装流程3、构造PackageManagerService对象3.1、保存应用的安装和运行信息3.1.1、android.server.pm.Settings3.1.2、创建Settings对象备用,接着把系统Ap... 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

...大纲引言一、PKMS遍历安装系统目录下的App1、Apk的结构2、PackageManagerService#main方法触发App安装流程3、构造PackageManagerService对象3.1、保存应用的安装和运行信息3.1.1、android.server.pm.Settings3.1.2、创建Settings对象备用,接着把系统Ap... 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

...大纲引言一、PKMS遍历安装系统目录下的App1、Apk的结构2、PackageManagerService#main方法触发App安装流程3、构造PackageManagerService对象3.1、保存应用的安装和运行信息3.1.1、android.server.pm.Settings3.1.2、创建Settings对象备用,接着把系统Ap... 查看详情

android的packagemanagerservice10.0源码解读(androidmanifest.xml解析)(代码片段)

...断Activity是否在AndroidManifest.xml里面注册(源码分析)Android的PackageManagerService10.0源码解读Android的ActivityManagerService(简称AMS)的源码分析Android的PackageManagerService10.0源码解读PackageManagerService简称PKMSPKMS简介PackageManagerService(简称PKMS&#x... 查看详情

android进阶——系统启动之systemserver创建并启动packagemanagerservice服务(代码片段)

...大纲引言一、PKMS遍历安装系统目录下的App1、Apk的结构2、PackageManagerService#main方法触发App安装流程3、构造PackageManagerService对象3.1、保存应用的安装和运行信息3.1.1、android.server.pm.Settings3.1.2、创建Settings对象备用,接着把系统Ap... 查看详情

pms(packagemanagerservice)原理简单介绍,启动过程源码简单解析(代码片段)

文章目录前言1.PMS2.源码和关键方法SystemServerPackageManagerServiceParallelPackageParserPackageParser3.细节总结4.时序图startuml代码参考材料前言先想一个最直接的问题:我们在写Android项目的时候,为什么要去写AndroidMenifest.xml这个清单... 查看详情

android开发浅谈之packagemanagerservice(pkms)(代码片段)

本文基于Android10.0主要从以下几个方面着手:PKMS启动PKMS安装APKPKMS卸载APKPKMS启动这里我简单的将其分为以下几个步骤:1.SystemServer通过PKMS的main方法启动PKMS2.PKMS构造方法中初始化Settings3.扫描各个系统目录下APP相关信息1.Sys... 查看详情

android开发浅谈之packagemanagerservice(pkms)(代码片段)

本文基于Android10.0主要从以下几个方面着手:PKMS启动PKMS安装APKPKMS卸载APKPKMS启动这里我简单的将其分为以下几个步骤:1.SystemServer通过PKMS的main方法启动PKMS2.PKMS构造方法中初始化Settings3.扫描各个系统目录下APP相关信息1.Sys... 查看详情

android设计模式笔记-packagemanagerservice信息树(代码片段)

Intent关于Intent我们都知道他是各个组件,进程之间的通信纽带,Android系统也是通过Intent来查找软件中的对应的组件,并且进行通信。我们知道在系统启动之后,系统会自动注册各种服务,WindowManagerService和Activ... 查看详情

工作日报2022.4.19packagemanagerservice扫描apk目录

...iten5.1升级到bturnc5.3无imei绑定用户选项澄清;6扫描APK目录PackageManagerService的构造函数中调用了scanDirTracedLI方法来扫描某个目录的apk文件。Android10.0中,PKMS主要扫描以下路径的APK信息:/vendor/overlay/product/overlay/product_services/overlay/odm... 查看详情