[pm] prevent system app downgrades of versions lower than preload
Also remove misleading commandline output. BUG: 256202273 Test: manual 1. Install preload system app v90, reboot 2. (W/O data, W/ Flag, 90->80 NOK) adb install -d ~/Downloads/PrivApplication_80.apk Performing Streamed Install adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_80.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: System app: com.example.privapplication cannot be downgraded to older than its preloaded version on the system image. Update version code 80 is older than current 90] 3. (90->100) Install data app v100 4. (W/ data, W/O Flag, 100->90 NOK) adb install ~/Downloads/PrivApplication_90.apk Performing Streamed Install adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_90.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: Downgrade detected: Update version code 90 is older than current 100] 5. (W/ data, W/ Flag, 100->90 downgrade OK) adb install -d ~/Downloads/PrivApplication_90.apk Performing Streamed Install Success 6. (90->100) Install v100 6. (W/data, W/ Flag, 100->80 NOK) adb install -d ~/Downloads/PrivApplication_80.apk Performing Streamed Install adb: failed to install /usr/local/google/home/schfan/Downloads/PrivApplication_80.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: System app: com.example.privapplication cannot be downgraded to older than its preloaded version on the system image. Update version code 80 is older than current 90] Change-Id: I5a8ee9e29a3a58f6e3fd188e0122355744b8b0ce
This commit is contained in:
committed by
Song Chun Fan
parent
37a13e30e2
commit
a4484d7f1b
@@ -2516,10 +2516,10 @@ final class InstallPackageHelper {
|
||||
// will be null whereas dataOwnerPkg will contain information about the package
|
||||
// which was uninstalled while keeping its data.
|
||||
AndroidPackage dataOwnerPkg = mPm.mPackages.get(packageName);
|
||||
PackageSetting dataOwnerPs = mPm.mSettings.getPackageLPr(packageName);
|
||||
if (dataOwnerPkg == null) {
|
||||
PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
|
||||
if (ps != null) {
|
||||
dataOwnerPkg = ps.getPkg();
|
||||
if (dataOwnerPs != null) {
|
||||
dataOwnerPkg = dataOwnerPs.getPkg();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2547,6 +2547,7 @@ final class InstallPackageHelper {
|
||||
if (dataOwnerPkg != null && !dataOwnerPkg.isSdkLibrary()) {
|
||||
if (!PackageManagerServiceUtils.isDowngradePermitted(installFlags,
|
||||
dataOwnerPkg.isDebuggable())) {
|
||||
// Downgrade is not permitted; a lower version of the app will not be allowed
|
||||
try {
|
||||
PackageManagerServiceUtils.checkDowngrade(dataOwnerPkg, pkgLite);
|
||||
} catch (PackageManagerException e) {
|
||||
@@ -2555,6 +2556,24 @@ final class InstallPackageHelper {
|
||||
return Pair.create(
|
||||
PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE, errorMsg);
|
||||
}
|
||||
} else if (dataOwnerPs.isSystem()) {
|
||||
// Downgrade is permitted, but system apps can't be downgraded below
|
||||
// the version preloaded onto the system image
|
||||
final PackageSetting disabledPs = mPm.mSettings.getDisabledSystemPkgLPr(
|
||||
dataOwnerPs);
|
||||
if (disabledPs != null) {
|
||||
dataOwnerPkg = disabledPs.getPkg();
|
||||
}
|
||||
try {
|
||||
PackageManagerServiceUtils.checkDowngrade(dataOwnerPkg, pkgLite);
|
||||
} catch (PackageManagerException e) {
|
||||
String errorMsg = "System app: " + packageName + " cannot be downgraded to"
|
||||
+ " older than its preloaded version on the system image. "
|
||||
+ e.getMessage();
|
||||
Slog.w(TAG, errorMsg);
|
||||
return Pair.create(
|
||||
PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE, errorMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user