Android Framwork之PKMS源码解析---调用方式

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 "";
}
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容