1、简单介绍
PackageManagerService简称PKMS,Android系统的核心服务之一,是在SystemServer的run方法中的
startBootstrapServices启动的,管理者着所有跟Package相关的工作,常见的比如安装,卸载,信息查询等,
主要完成以下核心功能:
1. 解析AndroidNanifest.xml清单文件,解析清单文件中的所有节点信息。
2. 扫描.apk文件,安装系统应用,安装本地应用等。
3. 管理本地应用,主要有, 安装,卸载,应用信息查询等。
2、PKMS调用方式
客户端可通过Context.getPackageManager()获得ApplicationPackageManager对象, 而mPM指向的是Proxy代理,当调用到mPM.方法后,将会调用到IPackageManager的Proxy代理方法,然后通过Binder机制中的mRemote与服务端PackageManagerService通信,并调用到PackageManagerService的方法。
image.png
- Binder服务端:PackageManagerService继承于IPackageManager.Stub;
- Binder客户端:ApplicationPackageManager(简称APM)的成员变量mPM继承于IPackageManager.Stub.Proxy; 本身APM是继承于PackageManager对象。
简单的调用如下:
/**
* 得到应用层序的版本名称
*
* @return
*/
private String getVersionName() {
PackageManager packageManager = getPackageManager();
try {
// 得到apk的功能清单文件:为了防止出错直接使用getPackageName()方法获得包名
// packageManager.getPackageInfo("com.xxx.xxx", 0);
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
//返回版本名称
return packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
return "";
}
}
网友评论