android packagemanager源码,Android源码个个击破之PackageManager

PackageManager是个实现类,具体的实现类是frameworks\base\core\java\android\app\ApplicationPackageManager.java   (此类是hide类,通过引用无法关联到。)

这个文件定义ApplicationPackageManager类,继承并实现了PackageManager中接口;

ApplicationPackageManager使用mPM变量,这个变量是PackageManagerService的客户端(IBinder对象),调用mPM对象中的方法,实际调用到了frameworks\base\services\java\com\android\server\pm\PackageManagerService.java文件中

的方法。

1.ApplicationPackageManager构造

784bc6bbac83790a0b89231fcbcc2ec3.png

2c722259f3feb330f25ac08c35415db3.png

继续追溯,看看ServiceManager.getService("package"),PackageManagerService在哪里添加的呢?

bc042a0038a53bcfbf0c232e206f4bad.png

在SystemServer里调用了PackageManagerService的main方法

58d8eb93e876082e24d31ca3c57ffaa3.png

2.getActivityInfo方法

f5b0304eea76d1670ef7c036c08061ab.png

其实调用的的是PackageManagerService的getActivityInfo方法

注意“mActivities.mActivities.get(component);”这里的mActivities重复写了一下,应该是网站的bug,实际代码应该是“mActivities.get(component);”

c31da1b6095dfc20221cc2a69895e947.png

mActivities是在scanPackageDirtyLI这个方法里填充mActivities的

71f30d13e101fc7ccedf76da9b36eea3.png

最终这个方法是通过 PackageManagerService的构造方法里调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值