diff options
| author | 2024-08-15 23:44:30 +0000 | |
|---|---|---|
| committer | 2024-08-15 23:44:30 +0000 | |
| commit | 7a39cc95c7f266f12c739b4264eaaf78b52ea982 (patch) | |
| tree | a8da36330122b729bfd797b5b3554ce33dbddbf9 | |
| parent | 3dabeabaf9289a5ecaca3ab7c9c992452020a610 (diff) | |
| parent | 4f203da193538c5a3a2e7d6eec9674de827927fe (diff) | |
Merge "[pm] check versionMajor on sdk lib package update" into main
| -rw-r--r-- | services/core/java/com/android/server/pm/InstallPackageHelper.java | 22 |
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; |