2.安装时作用
2.1 准备知识
在介绍LOCAL_PRIVILEGED_MODULE在安装时的作用之前,先介绍几个关键的准备知识:
(1)packages.xml
这个文件位于ROM设备的 data/system,读取需要root权限。记录系统中所有安装的应用信息,包含基本信息、签名和权限等。
举几个关键字段为例:
name 包名
codePath 应用安装的路径,非系统应用一般在/data/app/xxx,或者SD卡上;系统应用一般在/system/app/xxx或/system/priv-app/xxx
nativeLibraryPath 应用中本地库安装路径,一般在codePath/lib
version 版本号
userId/sharedUserId 应用的userId
(2)PMS的扫描(scan)与安装(install)
PMS,即PackageManagerService,是安卓框架层核心系统服务之一,常驻内存,实现与app安装、卸载相关功能。PMS对应的主要源代码为 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java。下面部分内容引自刘超《深入解析Android5.0系统》中对于PMS的总结。
扫描:PMS启动的时候,会扫描所有的apk文件和jar包,把它们的信息读取出来,保存在内存中。扫描过程中如果遇到没有优化的文件,会执行转换,将app文件从dex格式转成odex。扫描的逻辑在PMS构造方法中调用,下面是构造方法中的一部分相关逻辑:
public PackageManagerService(Context context, Installer installer,
boolean factoryTest, boolean onlyCore) {
......
// Collect vendor overlay packages.
// (Do this before scanning any apps.)
// For security and version matching reason, only consider
// overlay packages if they reside in VENDOR_OVERLAY_DIR.
File vendorOverlayDir = new File(VENDOR_OVERLAY_DIR);
scanDirLI(vendorOverlayDir, PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR, scanFlags | SCAN_TRUSTED_OVERLAY, 0);
// Find base frameworks (resource packages without code).
s