PMS
PMS 就是PackageManagerService,主要是负责应用的安装卸载更新等工作。
scanDirTracedLI(new File(VENDOR_OVERLAY_DIR),
mDefParseFlags//0 wjc
| PackageParser.PARSE_IS_SYSTEM_DIR,
scanFlags//SCAN_BOOTING | SCAN_INITIAL|SCAN_FIRST_BOOT_OR_UPGRADE;wjc
| SCAN_AS_SYSTEM
| SCAN_AS_VENDOR,
0);
scanDirTracedLI(new File(PRODUCT_OVERLAY_DIR),
mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM_DIR,
scanFlags
| SCAN_AS_SYSTEM
| SCAN_AS_PRODUCT,
0);
/// M: Support RSC overlay dir
sPmsExt.scanDirLI(PmsExt.INDEX_RSC_OVERLAY, mDefParseFlags, scanFlags, 0);
mParallelPackageParserCallback.findStaticOverlayPackages();
// Find base frameworks (resource packages without code).
scanDirTracedLI(frameworkDir,
mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM_DIR,
scanFlags
| SCAN_NO_DEX
| SCAN_AS_SYSTEM
| SCAN_AS_PRIVILEGED,
0);
PMS 通过上面scanDirTracedLI来解析应用,并保持应用的信息。
如何保持信息,是通过本身的Settings类来实现的,这个类在com.android.server.pm
Settings(File dataDir, PermissionSettings permission, Object lock) {
mLock = lock;
mPermissions = permission;
mRuntimePermissionsPersistence = new RuntimePermissionPersistence(mLock);
mSystemDir = new File(dataDir, "system");
mSystemDir.mkdirs();
FileUtils.setPermissions(mSystemDir.toString(),
FileUtils.S_IRWXU|FileUtils.S_IRWXG
|FileUtils.S_IROTH|FileUtils.S_IXOTH,
-1, -1);
mSettingsFilename = new File(mSystemDir, "packages.xml");
mBackupSettingsFilename = new File(mSystemDir, "packages-backup.xml");
mPackageListFilename = new File(mSystemDir, "packages.list");
FileUtils.setPermissions(mPackageListFilename, 0640, SYSTEM_UID, PACKAGE_INFO_GID);
final File kernelDir = new File("/config/sdcardfs");
mKernelMappingFilename = kernelDir.exists() ? kernelDir : null;
// Deprecated: Needed for migration
mStoppedPackagesFilename = new File(mSystemDir, "packages-stopped.xml");
mBackupStoppedPackagesFilename = new File(mSystemDir, "packages-stopped-backup.xml");
}
从上面看,主要是保持到data/system目录下的几个文件中
data/system 几个重要文件
packages.xml维护的是应用包的基本信息,权限信息、用户权组信息等等。信息比较详细。
packages.list维护的是应用包列表,只是包含具体的包名以及存储的路径等等信息。
packages-stopped.xml 维护的是被停掉的应用
packages.list
com.mediatek.lbs.em2.ui 10054 0 /data/user/0/com.mediatek.lbs.em2.ui platform:targetSdkVersion=28 1023,3003
com.android.cts.ctsshim 10073 0 /data/user/0/com.android.cts.ctsshim default:targetSdkVersion=24 none
com.ais.mimo.eservice 10086 0 /data/user/0/com.ais.mimo.eservice default:targetSdkVersion=26 3003
com.android.vpndialogs 10040 0 /data/user/0/com.android.vpndialogs platform:privapp:targetSdkVersion=28 none
com.android.phone 1001 0 /data/user_de/0/com.android.phone platform:privapp:targetSdkVersion=26 1065,3002,1023,3003,3001,3007,1002,3010,3011,1004,2002,3006
com.android.shell 2000 0 /data/user_de/0/com.android.shell platform:privapp:targetSdkVersion=28 1065,3002,1023,1002,3010,3011
com.android.wallpaperbackup 1000 0 /data/user/0/com.android.wallpaperbackup platform:privapp:targetSdkVersion=28 1065,3002,1023,3003,3001,3005,3006
com.android.providers.blockednumber 10015 0 /data/user_de/0/com.android.providers.blockednumber default:privapp:targetSdkVersion=28 1065
com.android.providers.userdictionary 10015 0 /data/user/0/com.android.providers.userdictionary default:privapp:targetSdkVersion=28 1065
com.android.emergency 10008 0 /data/user_de/0/com.android.emergency platform:privapp:targetSdkVersion=28 none