Catch parsing errors for pre-release platforms
In cases when a parsed APK is built with a pre-release platform (e.g. Tiramisu for 33) our generic parsing code may not fail, as it is called for user packages as well, and a single bad package may disable the whole device. Bug: 233398506 Test: presubmits Change-Id: I7f93176efceac94b0768d0e4d5be1c28ccce23e3
This commit is contained in:
@@ -368,8 +368,13 @@ public class FrameworkParsingPackageUtils {
|
||||
return input.success(targetVers);
|
||||
}
|
||||
|
||||
if (allowUnknownCodenames && UnboundedSdkLevel.isAtMost(targetCode)) {
|
||||
return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||||
try {
|
||||
if (allowUnknownCodenames && UnboundedSdkLevel.isAtMost(targetCode)) {
|
||||
return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
// isAtMost() throws it when encountering an older SDK codename
|
||||
return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, e.getMessage());
|
||||
}
|
||||
|
||||
// If it's a pre-release SDK and the codename matches this platform, it
|
||||
|
||||
@@ -113,6 +113,24 @@ public class SystemConfig {
|
||||
|
||||
final ArrayList<SplitPermissionInfo> mSplitPermissions = new ArrayList<>();
|
||||
|
||||
private static boolean isAtLeastSdkLevel(String version) {
|
||||
try {
|
||||
return UnboundedSdkLevel.isAtLeast(version);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// UnboundedSdkLevel throws when it sees a known old codename
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isAtMostSdkLevel(String version) {
|
||||
try {
|
||||
return UnboundedSdkLevel.isAtMost(version);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// UnboundedSdkLevel throws when it sees a known old codename
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static final class SharedLibraryEntry {
|
||||
public final String name;
|
||||
public final String filename;
|
||||
@@ -180,9 +198,9 @@ public class SystemConfig {
|
||||
// - onBootclasspathBefore is set and we are before that SDK
|
||||
canBeSafelyIgnored =
|
||||
(this.onBootclasspathSince != null
|
||||
&& UnboundedSdkLevel.isAtLeast(this.onBootclasspathSince))
|
||||
&& isAtLeastSdkLevel(this.onBootclasspathSince))
|
||||
|| (this.onBootclasspathBefore != null
|
||||
&& !UnboundedSdkLevel.isAtLeast(this.onBootclasspathBefore));
|
||||
&& !isAtLeastSdkLevel(this.onBootclasspathBefore));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -885,11 +903,9 @@ public class SystemConfig {
|
||||
+ parser.getPositionDescription());
|
||||
} else {
|
||||
boolean allowedMinSdk =
|
||||
minDeviceSdk == null || UnboundedSdkLevel.isAtLeast(
|
||||
minDeviceSdk);
|
||||
minDeviceSdk == null || isAtLeastSdkLevel(minDeviceSdk);
|
||||
boolean allowedMaxSdk =
|
||||
maxDeviceSdk == null || UnboundedSdkLevel.isAtMost(
|
||||
maxDeviceSdk);
|
||||
maxDeviceSdk == null || isAtMostSdkLevel(maxDeviceSdk);
|
||||
final boolean exists = new File(lfile).exists();
|
||||
if (allowedMinSdk && allowedMaxSdk && exists) {
|
||||
String bcpSince = parser.getAttributeValue(null,
|
||||
|
||||
Reference in New Issue
Block a user