在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. 广播通知
未完待续