1. 程式人生 > >pms包管理服務分析-初步理解

pms包管理服務分析-初步理解

初步理解

Android系統啟動過程中,會啟動一個包管理服務PackageManagerService(pms),這個服務主要負責掃描系統中指定目錄,找出裡面以apk結尾的檔案,通過對這些檔案進行解析,得到應用程式的所有資訊並完成應用程式的安裝過程。包管理服務中解析出來的apk資訊供其它服務使用,如ams。

pms主要解析apk的AndroidManifest檔案裡面的所有資訊,包括應用程式元件Activity/Service/BroadcastReceiver/ContentProvider等資訊,這些資訊非常有用,提供給其他服務使用,如ams。

SystemServer.java中啟動PackageManagerService

服務

在SystemServer的startBootstrapServices方法中獲得啟動pms,通過pms的main方法獲得其例項。

[/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java]

public static PackageManagerService main(Context context, Installer installer,
     boolean factoryTest, boolean onlyCore) {
	PackageManagerService m = new PackageManagerService(context, installer,	factoryTest, onlyCore);
	ServiceManager.addService("package", m);
	return m;
}

Main方法比較簡單,就是例項化了一個pms物件,然後將服務物件註冊到ServiceManager中,服務名字為”package”,通過命令adb shell service list列出系統所有註冊服務中,可以找到package服務。

注意:pms比ams晚啟動,但比ams提前SystemReady。pms的啟動到ready的大致流程如(圖1)所示。