如我們上節所講,在android中,為應用包的安裝,删除各種操作服務的,是packagemanagerserivce,簡稱pms.
如果想要調用pms的服務,則可以通過context去調用getpackagemanager方法。
這個定義于context.java中:
我們先來看一張圖,了解packagemanager與pms的關系:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLjFmNxMjNlVmNhJWOiZmYlVTO0czM0UmN2IGZ2UzN4IzN0QDN4EGMw8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
我們下面先以packagemanager中所提供的getapplicationinfo方法為例,看看它是如何被實作的。
packagename:包名
flags:支援下面的标志:
支援的标志如下:
get_shared_library_files:擷取so庫的安裝路徑,然後可以通過applicationinfo的sharedlibraryfiles屬性來讀取相關資訊。
match_system_only:隻包括帶有系統屬性的
match_uninstalled_packages:即使是應用被uninstall了,但隻要保留了資料,也可以被搜出來。
applicationpackagemanager繼承了抽象類packagemanager.
applicationpackagemanager是在contextimpl中被new出來的:
applicationpackagemanager中的第二個參數pm是溝通pms的橋梁。
我們來看activitythread中getpackagemanager的實作:
在applicationpackagemanager類中,其實還是對pms的對應功能的封裝。
真正的實作還是要看pms: