--摘自《android插件化开发指南》
1.PackageManagerService(PMS)是用来获取apk包的信息的
2.AMS总是会使用PMS加载包的信息,将其封装在LoadedApk这个类对象中,然后从中取出清单文件申请的四大组件信息
3.为什么app安装时,不把它解压呢?因为每次从apk中读取资源,并不是先解压再找图片资源,而是解析apk中的resources.arsc文件,这个文件存储着资源的所有信息,包括资源在apk中的地址,大小等。所以可以快速定位到相应资源文件,是一种很高效的算法。不解压的原因是节省空间
4.PMS中有个类PackageParse,是专门用来解析androidmanifest文件的,其中parsePackage方法返回的是Package类型的实体对象,然后使用generatePackageInfo方法,将其转换为PackageInfo类型
APP安装流程
第一步:PMS解析apk的清单文件,读取四大组件的信息
第二步:为app分配用户ID和用户组ID(按照权限分组)
第三步:在Launcher生成一个icon,icon中保存着默认启动的activity信息
第四步:把上面的信息记录在一个xml文件中,以备下次安装使用
IPackageManager是一个AIDL,以下语句返回的是相同的对象,都是PMS在APP进程的代理对象,都能获得当前apk包的信息
1)Context.getPackageManager()
2)ActivityThread.getPackageManager()
3)ActivityThread的sPackageManager
4)ApplicationPackageManager的mPM字段