PWS(Package Manager Service)它是 Android 系统中负责管理应用程序包的核心系统服务。
主要功能
应用版本回退
-
应用安装与卸载管理
- 安装流程控制:负责解析应用的安装包(APK 文件),检查其完整性和合法性。在安装过程中,PMS 会将应用的代码、资源等文件解压并存储到系统的相应目录,同时在系统数据库中记录应用的相关信息,如包名、版本号、权限列表等。
- 卸载操作处理:当用户卸载应用时,PMS 会负责删除应用在系统中的所有相关文件和数据,包括应用的安装目录、缓存文件、配置信息等,并从系统数据库中移除该应用的记录,确保系统中不再残留与该应用相关的任何信息。
-
应用信息管理
- 元数据存储与查询:存储了所有已安装应用的详细元数据信息,包括应用的名称、图标、描述、开发者信息等。其他系统组件或应用可以通过 PMS 提供的接口查询这些信息,以便在需要时获取应用的相关详情,例如在应用列表中显示应用的名称和图标。
- 版本管理:跟踪应用的版本号,能够判断应用是否有可用的更新版本。当有新版本的应用安装时,PMS 会根据版本号的规则进行比较和更新操作,确保系统中始终安装的是最新版本的应用,同时也可以提供应用版本回退等功能。
应用版本更新
-
版本号比较规则
- 常见版本号格式:应用的版本号通常采用 “主版本号。次版本号。修订号” 的格式,例如 “1.2.3”。其中主版本号表示重大功能更新或架构变更,次版本号表示新增功能或较大的改进,修订号表示小的修复或优化。
- 比较逻辑:PMS 在比较版本号时,会从左到右依次比较每个部分的数字。如果主版本号不同,主版本号大的版本为新版本;若主版本号相同,则比较次版本号,次版本号大的为新版本;若次版本号也相同,再比较修订号,以此类推。例如,版本 “2.1.0” 大于 “1.3.0”,“1.2.3” 大于 “1.2.2”。
- 更新操作流程
- 检测更新:应用通常会定期向服务器发送请求,检查是否有新版本可用。当发现有新版本时,会通知用户进行更新。用户确认更新后,应用会下载新版本的安装包。
- 安装包解析与验证:PMS 接收到新版本的安装包后,会对其进行解析,提取出其中的版本号等相关信息,并与当前已安装的应用版本号进行比较。同时,PMS 还会对安装包进行完整性和合法性验证,确保安装包没有被篡改且符合系统的安装要求。
- 执行更新:如果确认新版本的版本号大于当前版本号,且安装包验证通过,PMS 会开始执行更新操作。它会先停止正在运行的应用进程,然后将新版本的应用代码、资源等文件解压并覆盖安装到系统的相应目录中,更新系统数据库中应用的相关信息,包括版本号、权限列表等。最后,PMS 会启动应用的新版本,完成更新过程。
- 回退触发方式
- 用户主动回退:用户可能因为新版本存在兼容性问题、功能不符合需求等原因,希望回退到旧版本。此时,用户可以在系统的应用管理界面中找到相应的应用,并选择版本回退选项。
- 系统自动回退:在某些情况下,如新版本的应用导致系统不稳定或出现严重错误,系统可能会自动触发版本回退操作,以保证系统的正常运行。
- 回退操作流程
- 版本信息获取:当接收到版本回退请求后,PMS 会从系统数据库中获取应用的历史版本信息,包括之前安装过的各个版本的版本号、安装时间等。
- 回退包准备:PMS 会根据回退目标版本号,查找对应的应用安装包。如果系统中已经保留了旧版本的安装包,PMS 会直接使用该安装包;如果没有,PMS 可能会从应用商店或其他备份位置下载旧版本的安装包。
- 回退执行:PMS 会先卸载当前版本的应用,删除新版本在系统中安装的所有文件和数据,并恢复系统数据库中应用的相关信息到旧版本的状态。然后,PMS 会使用旧版本的安装包重新安装应用,将应用的代码、资源等文件解压并安装到系统的相应目录中,最后启动应用的旧版本,完成版本回退操作。
-
权限管理
- 权限分配与检查:在应用安装时,根据应用在清单文件中声明的权限列表,为应用分配相应的权限。在应用运行过程中,PMS 会负责检查应用是否具有执行特定操作的权限,例如当应用尝试访问用户的通讯录或摄像头时,PMS 会验证该应用是否已经被授予了相应的权限,以保障用户的隐私和系统的安全。
- 权限变更与管理:允许系统或用户在应用安装后对应用的权限进行更改,例如用户可以在系统设置中手动关闭某个应用的某些权限,PMS 会及时更新应用的权限状态,并在应用下次尝试使用相关权限时进行相应的处理。
工作原理
系统启动时初始化
在 Android 系统启动过程中,PMS 会被加载并初始化。它会扫描系统中所有已安装的应用程序包,解析每个应用的清单文件,获取应用的各种信息,并将这些信息存储到系统的数据库中,以便后续的查询和管理。
与 AMS 等服务协作
与 Activity Manager Service(AMS)等其他系统服务密切协作。例如,当 AMS 需要启动一个应用的 Activity 时,它会向 PMS 查询该应用的相关信息,如 Activity 的类名、启动模式等,PMS 会根据请求返回相应的信息,帮助 AMS 完成应用组件的启动过程。
基于 Binder 通信
与应用进程和其他系统服务之间通过 Binder 机制进行通信。应用可以通过 Binder 调用向 PMS 发送查询应用信息、请求安装或卸载应用等操作,PMS 接收到请求后,会根据具体的操作类型进行相应的处理,并通过 Binder 回调将结果返回给应用或其他系统服务。