第8章 Package Manager的机制与实现
Package Manager是Android为管理应用程序安装包(APK)提供的包管理器,这部分内容与Android启动过程联系十分紧密,是理解Android框架层的基础之一。
Package Manager的功能主要包含以下部分:
1)权限处理,包括对系统和应用定义的Permission和Permission Group信息的增加、删除、查询和检查。
2)包处理,包括扫描并安装和卸载APK包,查询包的UID、GID、包名、系统默认程序等信息。
3)比较两个包的Signatures信息是否相同。
4)查询Activity、Provider、Receiver、Service信息。
5)查询Application、Package、Resource、Shared Library、Feature信息。
6)Intent匹配。
其主要功能的实现位于以下文件中:
/frameworks/base/core/java/android/content/pm/PackageManager. java
/frameworks/base/services/java/com/android/server/pm/PackageManagerService. java
/frameworks/base/services/java/com/android/server/pm/Installer. java
/frameworks/base/services/java/com/android/server/pm/Settings. java
/frameworks/base/core/java/android/content/pm/PackageParser. java
/frameworks/base/core/java/android/os/FileObserver. java
/frameworks/base/core/java/android/app/ApplicationPackageManager. java
/frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService. java
frameworks/base/cmds/installd/installd. c
frameworks/base/cmds/installd/commands. c
frameworks/base/cmds/installd/utils. c
为简单起见,如无特别说明,仅以文件名指代上述目录下的文件。
注意 本章分析的Package Manager指Android的包管理器,Android Framework提供的PackageManager类仅仅是其中一部分。
8.1 Package Manager体系结构
Package Manager涉及的内容非常广泛,涵盖PackageManager、PackageManagerService(Java System Service)、属性系统、文件系统、Installd(守护服务)、DefaultContainerService(应用程序服务)、FileObserver以及Binder/Socket进程间通信等内容。需要对Package Manager的体系结构有一个整体的把握才能更好地理解这部分内容。
8.1.1 三层体系结构
根据Package Manager各模块的功能和在源码中所处的层次,可以将Package Manager划分为三层体系结构:应用层、中间层、服务层,如图8-1所示。
图 8-1 Package Manager体系结构
各层的功能如下。
1.应用层
应用层位于最上层,包括Google Market、PackageInstaller.apk以及其他第三方的安装界面。其中Google Market用于安装Market上的应用程序,PackageInstaller.apk是应用层/packages/apps/PackageInstaller目录下提供的默认APK安装界面,用于安装SD卡或者内部存储设备上的APK安装包。第三方安装界面实现的功能与PackageInstaller.apk类似。
2.中间层
中间层包括两个模块:1)PackageManager及其子类;2)adb和pm命令。PackageManager对外提供API接口,这是一个抽象类,由其子类ApplicationPackageManager实现其定义的接口,其上层的应用层便是调用这些API接口实现具体功能;adb和pm命令用于安装和卸载APK。这两个模块的共同特点都是通过Binder通信最终调用PackageManagerService的对等方法实现具体的功能。
3.服务层
服务层即PackageManagerService及其相关类。PackageManagerService是在Android启动过程中的init2阶段启动的Java System Service。从Binder通信的角度看,中间层是其Client端。
PackageManagerService并没有实现服务层的所有功能,一些具体的功能主要由Settings、Installer、FileObserver、DefaultContainerService等模块实现。Package Manager的核心功能都在服务层实现,本章将主要分析这部分内容。