Merge "Don\'t override pre-release target sdk" into nyc-dev
am: 97ef0e7
* commit '97ef0e77afa3be6255b70c8567843ac298386251':
Don't override pre-release target sdk
Change-Id: I59519454c9304b37404da00044f833a8fe6e7890
This commit is contained in:
@@ -502,6 +502,9 @@ public final class Pm {
|
||||
sessionParams.volumeUuid = null;
|
||||
}
|
||||
break;
|
||||
case "--force-sdk":
|
||||
sessionParams.installFlags |= PackageManager.INSTALL_FORCE_SDK;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown option " + opt);
|
||||
}
|
||||
|
||||
@@ -683,6 +683,14 @@ public abstract class PackageManager {
|
||||
*/
|
||||
public static final int INSTALL_DONT_KILL_APP = 0x00001000;
|
||||
|
||||
/**
|
||||
* Flag parameter for {@link #installPackage} to indicate that this package is an
|
||||
* upgrade to a package that refers to the SDK via release letter.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int INSTALL_FORCE_SDK = 0x00002000;
|
||||
|
||||
/**
|
||||
* Flag parameter for
|
||||
* {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
|
||||
|
||||
@@ -652,6 +652,7 @@ public class PackageParser {
|
||||
public final static int PARSE_TRUSTED_OVERLAY = 1<<9;
|
||||
public final static int PARSE_ENFORCE_CODE = 1<<10;
|
||||
public final static int PARSE_IS_EPHEMERAL = 1<<11;
|
||||
public final static int PARSE_FORCE_SDK = 1<<12;
|
||||
|
||||
private static final Comparator<String> sSplitNameComparator = new SplitNameComparator();
|
||||
|
||||
|
||||
@@ -13796,9 +13796,24 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
final int[] allUsers;
|
||||
final int[] installedUsers;
|
||||
|
||||
// First find the old package info and check signatures
|
||||
synchronized(mPackages) {
|
||||
oldPackage = mPackages.get(pkgName);
|
||||
if (DEBUG_INSTALL) Slog.d(TAG, "replacePackageLI: new=" + pkg + ", old=" + oldPackage);
|
||||
|
||||
// don't allow upgrade to target a release SDK from a pre-release SDK
|
||||
final boolean oldTargetsPreRelease = oldPackage.applicationInfo.targetSdkVersion
|
||||
== android.os.Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
final boolean newTargetsPreRelease = pkg.applicationInfo.targetSdkVersion
|
||||
== android.os.Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
if (oldTargetsPreRelease
|
||||
&& !newTargetsPreRelease
|
||||
&& ((policyFlags & PackageParser.PARSE_FORCE_SDK) == 0)) {
|
||||
Slog.w(TAG, "Can't install package targeting released sdk");
|
||||
res.setReturnCode(PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
|
||||
return;
|
||||
}
|
||||
|
||||
// don't allow an upgrade from full to ephemeral
|
||||
final boolean oldIsEphemeral = oldPackage.applicationInfo.isEphemeralApp();
|
||||
if (isEphemeral && !oldIsEphemeral) {
|
||||
// can't downgrade from full to ephemeral
|
||||
@@ -13806,7 +13821,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
res.setReturnCode(PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID);
|
||||
return;
|
||||
}
|
||||
if (DEBUG_INSTALL) Slog.d(TAG, "replacePackageLI: new=" + pkg + ", old=" + oldPackage);
|
||||
|
||||
// verify signatures are valid
|
||||
final PackageSetting ps = mSettings.mPackages.get(pkgName);
|
||||
if (shouldCheckUpgradeKeySetLP(ps, scanFlags)) {
|
||||
if (!checkUpgradeKeySetLP(ps, pkg)) {
|
||||
@@ -14414,6 +14430,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
final boolean onExternal = (((installFlags & PackageManager.INSTALL_EXTERNAL) != 0)
|
||||
|| (args.volumeUuid != null));
|
||||
final boolean ephemeral = ((installFlags & PackageManager.INSTALL_EPHEMERAL) != 0);
|
||||
final boolean forceSdk = ((installFlags & PackageManager.INSTALL_FORCE_SDK) != 0);
|
||||
boolean replace = false;
|
||||
int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
|
||||
if (args.move != null) {
|
||||
@@ -14442,7 +14459,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
| PackageParser.PARSE_ENFORCE_CODE
|
||||
| (forwardLocked ? PackageParser.PARSE_FORWARD_LOCK : 0)
|
||||
| (onExternal ? PackageParser.PARSE_EXTERNAL_STORAGE : 0)
|
||||
| (ephemeral ? PackageParser.PARSE_IS_EPHEMERAL : 0);
|
||||
| (ephemeral ? PackageParser.PARSE_IS_EPHEMERAL : 0)
|
||||
| (forceSdk ? PackageParser.PARSE_FORCE_SDK : 0);
|
||||
PackageParser pp = new PackageParser();
|
||||
pp.setSeparateProcesses(mSeparateProcesses);
|
||||
pp.setDisplayMetrics(mMetrics);
|
||||
|
||||
@@ -1000,6 +1000,9 @@ class PackageManagerShellCommand extends ShellCommand {
|
||||
case "-g":
|
||||
sessionParams.installFlags |= PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS;
|
||||
break;
|
||||
case "--dont-kill":
|
||||
sessionParams.installFlags |= PackageManager.INSTALL_DONT_KILL_APP;
|
||||
break;
|
||||
case "--originating-uri":
|
||||
sessionParams.originatingUri = Uri.parse(getNextArg());
|
||||
break;
|
||||
@@ -1035,6 +1038,9 @@ class PackageManagerShellCommand extends ShellCommand {
|
||||
sessionParams.volumeUuid = null;
|
||||
}
|
||||
break;
|
||||
case "--force-sdk":
|
||||
sessionParams.installFlags |= PackageManager.INSTALL_FORCE_SDK;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown option " + opt);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user