diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 86fc0cf825075..5ff9c95c1a331 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -9206,6 +9206,29 @@ public class PackageManagerService extends IPackageManager.Stub } } + /** + * Clear the package profile if this was an upgrade and the package + * version was updated. + */ + private void maybeClearProfilesForUpgradesLI( + @Nullable PackageSetting originalPkgSetting, + @NonNull PackageParser.Package currentPkg) { + if (originalPkgSetting == null || !isUpgrade()) { + return; + } + if (originalPkgSetting.versionCode == currentPkg.mVersionCode) { + return; + } + + clearAppProfilesLIF(currentPkg, UserHandle.USER_ALL); + if (DEBUG_INSTALL) { + Slog.d(TAG, originalPkgSetting.name + + " clear profile due to version change " + + originalPkgSetting.versionCode + " != " + + currentPkg.mVersionCode); + } + } + /** * Traces a package scan. * @see #scanPackageLI(File, int, int, long, UserHandle) @@ -9491,6 +9514,9 @@ public class PackageManagerService extends IPackageManager.Stub // Verify certificates against what was last scanned collectCertificatesLI(ps, pkg, scanFile, policyFlags); + // Reset profile if the application version is changed + maybeClearProfilesForUpgradesLI(ps, pkg); + /* * A new system app appeared, but we already had a non-system one of the * same name installed earlier.