summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-08-15 23:44:30 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-15 23:44:30 +0000
commit7a39cc95c7f266f12c739b4264eaaf78b52ea982 (patch)
treea8da36330122b729bfd797b5b3554ce33dbddbf9
parent3dabeabaf9289a5ecaca3ab7c9c992452020a610 (diff)
parent4f203da193538c5a3a2e7d6eec9674de827927fe (diff)
Merge "[pm] check versionMajor on sdk lib package update" into main
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 22b4d5def8f4..5105fd384367 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1399,7 +1399,29 @@ final class InstallPackageHelper {
"Package " + pkgName + " is a persistent app. "
+ "Persistent apps are not updateable.");
}
+ // When updating an sdk library, make sure that the versionMajor is
+ // changed if the targetSdkVersion and minSdkVersion have changed
+ if (parsedPackage.isSdkLibrary() && ps.getPkg() != null
+ && ps.getPkg().isSdkLibrary()) {
+ final int oldMinSdk = ps.getPkg().getMinSdkVersion();
+ final int newMinSdk = parsedPackage.getMinSdkVersion();
+ if (oldTargetSdk != newTargetSdk || oldMinSdk != newMinSdk) {
+ final int oldVersionMajor = ps.getPkg().getSdkLibVersionMajor();
+ final int newVersionMajor = parsedPackage.getSdkLibVersionMajor();
+ if (oldVersionMajor == newVersionMajor) {
+ throw new PrepareFailure(
+ PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE,
+ "Failure updating " + pkgName + " as it updates"
+ + " an sdk library <"
+ + parsedPackage.getSdkLibraryName() + ">"
+ + " without changing the versionMajor, but the"
+ + " targetSdkVersion or minSdkVersion has changed."
+ );
+ }
+ }
+ }
}
+
}
PackageSetting signatureCheckPs = ps;