Merge "Allow forcing target SDK to current dev"
This commit is contained in:
committed by
Android (Google) Code Review
commit
422a67987f
@@ -787,7 +787,8 @@ public abstract class PackageManager {
|
||||
|
||||
/**
|
||||
* Flag parameter for {@link #installPackage} to indicate that this package is an
|
||||
* upgrade to a package that refers to the SDK via release letter.
|
||||
* upgrade to a package that refers to the SDK via release letter or is targeting an SDK via
|
||||
* release letter that the current build does not support.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
|
||||
@@ -2245,8 +2245,9 @@ public class PackageParser {
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean defaultToCurrentDevBranch = (flags & PARSE_FORCE_SDK) != 0;
|
||||
final int targetSdkVersion = PackageParser.computeTargetSdkVersion(targetVers,
|
||||
targetCode, SDK_VERSION, SDK_CODENAMES, outError);
|
||||
targetCode, SDK_CODENAMES, outError, defaultToCurrentDevBranch);
|
||||
if (targetSdkVersion < 0) {
|
||||
mParseError = PackageManager.INSTALL_FAILED_OLDER_SDK;
|
||||
return null;
|
||||
@@ -2562,19 +2563,19 @@ public class PackageParser {
|
||||
* application manifest, or 0 otherwise
|
||||
* @param targetCode targetSdkVersion code, if specified in the application
|
||||
* manifest, or {@code null} otherwise
|
||||
* @param platformSdkVersion platform SDK version number, typically
|
||||
* Build.VERSION.SDK_INT
|
||||
* @param platformSdkCodenames array of allowed pre-release SDK codenames
|
||||
* for this platform
|
||||
* @param outError output array to populate with error, if applicable
|
||||
* @param forceCurrentDev if development target code is not available, use the current
|
||||
* development version by default.
|
||||
* @return the targetSdkVersion to use at runtime, or -1 if the package is
|
||||
* not compatible with this platform
|
||||
* @hide Exposed for unit testing only.
|
||||
*/
|
||||
@TestApi
|
||||
public static int computeTargetSdkVersion(@IntRange(from = 0) int targetVers,
|
||||
@Nullable String targetCode, @IntRange(from = 1) int platformSdkVersion,
|
||||
@NonNull String[] platformSdkCodenames, @NonNull String[] outError) {
|
||||
@Nullable String targetCode, @NonNull String[] platformSdkCodenames,
|
||||
@NonNull String[] outError, boolean forceCurrentDev) {
|
||||
// If it's a release SDK, return the version number unmodified.
|
||||
if (targetCode == null) {
|
||||
return targetVers;
|
||||
@@ -2582,7 +2583,7 @@ public class PackageParser {
|
||||
|
||||
// If it's a pre-release SDK and the codename matches this platform, it
|
||||
// definitely targets this SDK.
|
||||
if (ArrayUtils.contains(platformSdkCodenames, targetCode)) {
|
||||
if (ArrayUtils.contains(platformSdkCodenames, targetCode) || forceCurrentDev) {
|
||||
return Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
}
|
||||
|
||||
|
||||
@@ -146,14 +146,14 @@ public class PackageParserTest {
|
||||
}
|
||||
|
||||
private void verifyComputeTargetSdkVersion(int targetSdkVersion, String targetSdkCodename,
|
||||
boolean isPlatformReleased, int expectedTargetSdk) {
|
||||
boolean isPlatformReleased, int expectedTargetSdk, boolean forceCurrentDev) {
|
||||
final String[] outError = new String[1];
|
||||
final int result = PackageParser.computeTargetSdkVersion(
|
||||
targetSdkVersion,
|
||||
targetSdkCodename,
|
||||
PLATFORM_VERSION,
|
||||
isPlatformReleased ? CODENAMES_RELEASED : CODENAMES_PRE_RELEASE,
|
||||
outError);
|
||||
outError,
|
||||
forceCurrentDev);
|
||||
|
||||
assertEquals(result, expectedTargetSdk);
|
||||
|
||||
@@ -169,34 +169,45 @@ public class PackageParserTest {
|
||||
// Do allow older release targetSdkVersion on pre-release platform.
|
||||
// APP: Released API 10
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION);
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, false, OLDER_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Do allow same release targetSdkVersion on pre-release platform.
|
||||
// APP: Released API 20
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION);
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, false, PLATFORM_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Do allow newer release targetSdkVersion on pre-release platform.
|
||||
// APP: Released API 30
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, false, NEWER_VERSION);
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, false, NEWER_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Don't allow older pre-release targetSdkVersion on pre-release platform.
|
||||
// APP: Pre-release API 10
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1);
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, false, -1,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Do allow same pre-release targetSdkVersion on pre-release platform,
|
||||
// but overwrite the specified version with CUR_DEVELOPMENT.
|
||||
// APP: Pre-release API 20
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, false,
|
||||
Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||||
Build.VERSION_CODES.CUR_DEVELOPMENT, false /* forceCurrentDev */);
|
||||
|
||||
// Don't allow newer pre-release targetSdkVersion on pre-release platform.
|
||||
// APP: Pre-release API 30
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1);
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false, -1,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Force newer pre-release targetSdkVersion to current pre-release platform.
|
||||
// APP: Pre-release API 30
|
||||
// DEV: Pre-release API 20
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, false,
|
||||
Build.VERSION_CODES.CUR_DEVELOPMENT, true /* forceCurrentDev */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -204,32 +215,38 @@ public class PackageParserTest {
|
||||
// Do allow older release targetSdkVersion on released platform.
|
||||
// APP: Released API 10
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION);
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, RELEASED, true, OLDER_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Do allow same release targetSdkVersion on released platform.
|
||||
// APP: Released API 20
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION);
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, RELEASED, true, PLATFORM_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Do allow newer release targetSdkVersion on released platform.
|
||||
// APP: Released API 30
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, true, NEWER_VERSION);
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, RELEASED, true, NEWER_VERSION,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Don't allow older pre-release targetSdkVersion on released platform.
|
||||
// APP: Pre-release API 10
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1);
|
||||
verifyComputeTargetSdkVersion(OLDER_VERSION, OLDER_PRE_RELEASE, true, -1,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Don't allow same pre-release targetSdkVersion on released platform.
|
||||
// APP: Pre-release API 20
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1);
|
||||
verifyComputeTargetSdkVersion(PLATFORM_VERSION, PRE_RELEASE, true, -1,
|
||||
false /* forceCurrentDev */);
|
||||
|
||||
// Don't allow newer pre-release targetSdkVersion on released platform.
|
||||
// APP: Pre-release API 30
|
||||
// DEV: Released API 20
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1);
|
||||
verifyComputeTargetSdkVersion(NEWER_VERSION, NEWER_PRE_RELEASE, true, -1,
|
||||
false /* forceCurrentDev */);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user