From 724530ce378fba48f1a6614c2f3d8b543682bc4c Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Wed, 8 Jun 2022 12:54:31 -0700 Subject: [PATCH] [pm] Fix appId naming + appId should not be called userId (at least in dumpsys) + fixing a mistake from ag/16740473 (line 1285) + remove log spam when appId was not set for package settings with shared user setting which is expected during initialization (line 1286) BUG: 235381248 Test: builds / dumpsys Test: will test with manual OTA Change-Id: I9ca72c151107bf4c72f0728065fe6b7447049483 --- .../java/com/android/server/pm/Settings.java | 89 +++++++++++-------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index e788c79df3e56..7d375bd167109 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -993,7 +993,7 @@ public final class Settings implements Watchable, Snappable { pkgSetting = new PackageSetting(pkgName, realPkgName, codePath, legacyNativeLibraryPath, primaryCpuAbi, secondaryCpuAbi, null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags, - 0 /*sharedUserId*/, usesSdkLibraries, usesSdkLibrariesVersions, + 0 /*sharedUserAppId*/, usesSdkLibraries, usesSdkLibrariesVersions, usesStaticLibraries, usesStaticLibrariesVersions, createMimeGroups(mimeGroupNames), domainSetId); pkgSetting.setLastModifiedTime(codePath.lastModified()); @@ -1282,12 +1282,12 @@ public final class Settings implements Watchable, Snappable { "Package " + p.getPackageName() + " was user " + existingSharedUserSetting + " but is now " + sharedUser + "; I am not changing its files so it will probably fail!"); - sharedUser.removePackage(p); - } else if (p.getAppId() != sharedUser.mAppId) { + existingSharedUserSetting.removePackage(p); + } else if (p.getAppId() != 0 && p.getAppId() != sharedUser.mAppId) { PackageManagerService.reportSettingsProblem(Log.ERROR, - "Package " + p.getPackageName() + " was user id " + p.getAppId() + "Package " + p.getPackageName() + " was app id " + p.getAppId() + " but is now user " + sharedUser - + " with id " + sharedUser.mAppId + + " with app id " + sharedUser.mAppId + "; I am not changing its files so it will probably fail!"); } @@ -1296,15 +1296,15 @@ public final class Settings implements Watchable, Snappable { p.setAppId(sharedUser.mAppId); } - // If we know about this user id, we have to update it as it + // If we know about this app id, we have to update it as it // has to point to the same PackageSetting instance as the package. - Object userIdPs = getSettingLPr(p.getAppId()); + Object appIdPs = getSettingLPr(p.getAppId()); if (sharedUser == null) { - if (userIdPs != null && userIdPs != p) { + if (appIdPs != null && appIdPs != p) { mAppIds.replaceSetting(p.getAppId(), p); } } else { - if (userIdPs != null && userIdPs != sharedUser) { + if (appIdPs != null && appIdPs != sharedUser) { mAppIds.replaceSetting(p.getAppId(), sharedUser); } } @@ -3581,17 +3581,17 @@ public final class Settings implements Watchable, Snappable { UUID domainSetId = DomainVerificationManagerInternal.DISABLED_ID; PackageSetting ps = new PackageSetting(name, realName, new File(codePathStr), legacyNativeLibraryPathStr, primaryCpuAbiStr, secondaryCpuAbiStr, cpuAbiOverrideStr, - versionCode, pkgFlags, pkgPrivateFlags, 0 /*sharedUserId*/, null, null, null, null, - null, domainSetId); + versionCode, pkgFlags, pkgPrivateFlags, 0 /*sharedUserAppId*/, null, null, null, + null, null, domainSetId); long timeStamp = parser.getAttributeLongHex(null, "ft", 0); if (timeStamp == 0) { timeStamp = parser.getAttributeLong(null, "ts", 0); } ps.setLastModifiedTime(timeStamp); ps.setLastUpdateTime(parser.getAttributeLongHex(null, "ut", 0)); - ps.setAppId(parser.getAttributeInt(null, "userId", 0)); + ps.setAppId(parseAppId(parser)); if (ps.getAppId() <= 0) { - final int sharedUserAppId = parser.getAttributeInt(null, "sharedUserId", 0); + final int sharedUserAppId = parseSharedUserAppId(parser); ps.setAppId(sharedUserAppId); ps.setSharedUserAppId(sharedUserAppId); } @@ -3638,7 +3638,7 @@ public final class Settings implements Watchable, Snappable { throws XmlPullParserException, IOException { String name = null; String realName = null; - int userId = 0; + int appId = 0; int sharedUserAppId = 0; String codePathStr = null; String legacyCpuAbiString = null; @@ -3670,8 +3670,8 @@ public final class Settings implements Watchable, Snappable { try { name = parser.getAttributeValue(null, ATTR_NAME); realName = parser.getAttributeValue(null, "realName"); - userId = parser.getAttributeInt(null, "userId", 0); - sharedUserAppId = parser.getAttributeInt(null, "sharedUserId", 0); + appId = parseAppId(parser); + sharedUserAppId = parseSharedUserAppId(parser); codePathStr = parser.getAttributeValue(null, "codePath"); legacyCpuAbiString = parser.getAttributeValue(null, "requiredCpuAbi"); @@ -3764,8 +3764,8 @@ public final class Settings implements Watchable, Snappable { firstInstallTime = parser.getAttributeLongHex(null, "it", 0); lastUpdateTime = parser.getAttributeLongHex(null, "ut", 0); if (PackageManagerService.DEBUG_SETTINGS) - Log.v(PackageManagerService.TAG, "Reading package: " + name + " userId=" + userId - + " sharedUserId=" + sharedUserAppId); + Log.v(PackageManagerService.TAG, "Reading package: " + name + " appId=" + appId + + " sharedUserAppId=" + sharedUserAppId); if (realName != null) { realName = realName.intern(); } @@ -3777,19 +3777,19 @@ public final class Settings implements Watchable, Snappable { PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: has no codePath at " + parser.getPositionDescription()); - } else if (userId > 0) { + } else if (appId > 0) { packageSetting = addPackageLPw(name.intern(), realName, new File(codePathStr), legacyNativeLibraryPathStr, primaryCpuAbiString, secondaryCpuAbiString, - cpuAbiOverrideString, userId, versionCode, pkgFlags, pkgPrivateFlags, + cpuAbiOverrideString, appId, versionCode, pkgFlags, pkgPrivateFlags, null /* usesSdkLibraries */, null /* usesSdkLibraryVersions */, null /* usesStaticLibraries */, null /* usesStaticLibraryVersions */, null /* mimeGroups */, domainSetId); if (PackageManagerService.DEBUG_SETTINGS) - Log.i(PackageManagerService.TAG, "Reading package " + name + ": userId=" - + userId + " pkg=" + packageSetting); + Log.i(PackageManagerService.TAG, "Reading package " + name + ": appId=" + + appId + " pkg=" + packageSetting); if (packageSetting == null) { - PackageManagerService.reportSettingsProblem(Log.ERROR, "Failure adding uid " - + userId + " while parsing settings at " + PackageManagerService.reportSettingsProblem(Log.ERROR, "Failure adding appId " + + appId + " while parsing settings at " + parser.getPositionDescription()); } else { packageSetting.setLastModifiedTime(timeStamp); @@ -3811,22 +3811,23 @@ public final class Settings implements Watchable, Snappable { mPendingPackages.add(packageSetting); if (PackageManagerService.DEBUG_SETTINGS) Log.i(PackageManagerService.TAG, "Reading package " + name - + ": sharedUserId=" + sharedUserAppId + " pkg=" + packageSetting); + + ": sharedUserAppId=" + sharedUserAppId + " pkg=" + + packageSetting); } else { PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: package " + name - + " has bad sharedId " + sharedUserAppId + " at " + + " has bad sharedUserAppId " + sharedUserAppId + " at " + parser.getPositionDescription()); } } else { PackageManagerService.reportSettingsProblem(Log.WARN, - "Error in package manager settings: package " + name + " has bad userId " - + userId + " at " + parser.getPositionDescription()); + "Error in package manager settings: package " + name + " has bad appId " + + appId + " at " + parser.getPositionDescription()); } } catch (NumberFormatException e) { PackageManagerService.reportSettingsProblem(Log.WARN, - "Error in package manager settings: package " + name + " has bad userId " - + userId + " at " + parser.getPositionDescription()); + "Error in package manager settings: package " + name + " has bad appId " + + appId + " at " + parser.getPositionDescription()); } if (packageSetting != null) { InstallSource installSource = InstallSource.create( @@ -3959,6 +3960,22 @@ public final class Settings implements Watchable, Snappable { } } + /** + * The attribute "appId" was historically called "userId". + * TODO(b/235381248): Fix it when we solve tooling compatibility issues + */ + private static int parseAppId(TypedXmlPullParser parser) { + return parser.getAttributeInt(null, "userId", 0); + } + + /** + * The attribute "sharedUserAppId" was historically called "sharedUserId". + * TODO(b/235381248): Fix it when we solve tooling compatibility issues + */ + private static int parseSharedUserAppId(TypedXmlPullParser parser) { + return parser.getAttributeInt(null, "sharedUserId", 0); + } + void addInstallerPackageNames(InstallSource installSource) { if (installSource.installerPackageName != null) { mInstallerPackages.add(installSource.installerPackageName); @@ -4089,7 +4106,7 @@ public final class Settings implements Watchable, Snappable { SharedUserSetting su = null; { name = parser.getAttributeValue(null, ATTR_NAME); - int userId = parser.getAttributeInt(null, "userId", 0); + int appId = parseAppId(parser); if (parser.getAttributeBoolean(null, "system", false)) { pkgFlags |= ApplicationInfo.FLAG_SYSTEM; } @@ -4097,13 +4114,13 @@ public final class Settings implements Watchable, Snappable { PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: has no name at " + parser.getPositionDescription()); - } else if (userId == 0) { + } else if (appId == 0) { PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: shared-user " + name - + " has bad userId " + userId + " at " + + " has bad appId " + appId + " at " + parser.getPositionDescription()); } else { - if ((su = addSharedUserLPw(name.intern(), userId, pkgFlags, pkgPrivateFlags)) + if ((su = addSharedUserLPw(name.intern(), appId, pkgFlags, pkgPrivateFlags)) == null) { PackageManagerService .reportSettingsProblem(Log.ERROR, "Occurred while parsing settings at " @@ -4528,7 +4545,7 @@ public final class Settings implements Watchable, Snappable { pw.println(ps.getPackageName()); } - pw.print(prefix); pw.print(" userId="); pw.println(ps.getAppId()); + pw.print(prefix); pw.print(" appId="); pw.println(ps.getAppId()); SharedUserSetting sharedUserSetting = getSharedUserSettingLPr(ps); if (sharedUserSetting != null) { @@ -5100,7 +5117,7 @@ public final class Settings implements Watchable, Snappable { pw.println("):"); String prefix = " "; - pw.print(prefix); pw.print("userId="); pw.println(su.mAppId); + pw.print(prefix); pw.print("appId="); pw.println(su.mAppId); pw.print(prefix); pw.println("Packages"); final ArraySet susPackageStates =