在android 4.4源碼上進行的分析。android
1、PackageManager如何產生的?app
咱們平時在代碼中使用的context.getPackageManager()oop
那麼這個PackageManager是怎樣一步一步生成的呢?spa
context.getPackageManager()->ContextImpl.getPackageManager()視頻
經過查看ContextImpl源碼發現返回的是ApplicationPackageManager的對象,xml
ApplicationPackageManager 是繼承 抽象類PackageManager對象
ApplicationPackageManager只是一個裝飾類,真正的實現類是經過ActivityThread.getPackageManager()來獲取的blog
看看ActivityThread源碼(這裏說一句,咱們app的啓動入口也在ActivityThread裏面)繼承
真正的實現類是經過ServiceManager返回的binder對象而來,接口
這個實現接口的類就是PackageManagerService
2、PackageManagerService如何工做的?
PackageManagerService是如何建立的呢?
SystemServer.main() -> initAndLoop()
建立後作了啥?
1.首先 掃描安裝「system/framework」目錄下的jar包
2.掃描 安裝系統system/app的應用程序
3.製造商的目錄下/vendor/app應用包
4.掃描「data/app」目錄,即用戶安裝的第三方應用
5.掃描" data/app-private"目錄,即安裝DRM保護的APK文件(一個受保護的歌曲或受保 護的視頻是使用 DRM 保護的文件)
1. 從apk, xml中載入pacakge信息, 存儲到內部成員變量中, 用於後面的查找. 關鍵的方法是scanPackageLI().
2. 各類查詢操做, 包括query Intent操做.
3. install package和delete package的操做. 還有後面的關鍵方法是installPackageLI().
4. 廣播通知
未完待續