PackageManagerService——掌管APP的安装、卸载和查询

本文深入探讨了Android系统中PackageManagerService(PKMS)的工作原理及关键功能,包括如何处理系统加密、首次启动判断、dex优化、APK扫描流程、权限配置、资源定义、组件查询等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、vold.decrypt系统属性可以指定android设备是否加密,如果加密(即该属性值为1或者“trigger_restart_min_framework”),onlyCore设置为true,那么PackageManagerService将只会扫描系统库;


2、SystemServer判断系统是否初次启动,是调用了PKMS的isFirstBoot()函数,由于PKMS启动后会生成一些文件(data/system目录),所以isFirstBoot函数就是通过读取这些文件(Settings的readLPw函数)判断是否首次启动的;


3、SystemServer会调用PKMS的performBootDexOpt()函数,实现dex优化(但当通过系统属性ro.build.type得知此系统为eng版本时,将不对package做dex优化);


4、PKMS的构造函数需要比较长的执行时间,这也是Android系统启动费时的主要原因之一。PKMS会扫描系统几个目标文件夹的APK,并建立各种便于管理和查询的数据结构,完成APK包信息从物理文件到内存数据的加载过程。工作的过程无非就是扫描解析,比较简单,但这些用来存储解析结果的数据结构,以及它们之间的相互关系非常复杂;


5、PKMS的成员变量mSdkVersion,在定义时便取系统属性ro.build.version.sdk的值进行初始化,如果没有定义,APK将无法知道自己运行在Android的哪个版本上;


6、据说UserManager对象,按照google的设想,将实现每个user安装自己的应用,使得手机支持多个user,为企业版android打基础;


7、/system/etc/permissions目录存放了许多xml文件,都是系统权限相关的配置文件,如platform.xml建立了权限名与gid的映射关系;


8、/system/frameworks/framework-res.apk,定义了系统常用的资源,还有几个重要的Activity,如长按Power键后弹出的选择框;


9、PKMS除了负责系统中apk的安装、升级、卸载之外,对外提供统一的查询信息是其主要职责,包括查询系统中匹配某Intent的Activity、BroadcastReceiver或service;


10、PKMS的构造函数中传递了一个Installer类型的参数,java层的Installer类通过socket和后台服务installd交互,托付installd完成一些dex优化等操作,这里是一个通过socket实现跨进程交互的很好范例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值