130 lines
6.1 KiB
Diff
130 lines
6.1 KiB
Diff
|
From 3c9a5321dc94124367f2f4363d85a8f488f5d4d1 Mon Sep 17 00:00:00 2001
|
||
|
From: Yurii Zubrytskyi <zyy@google.com>
|
||
|
Date: Wed, 04 May 2022 01:05:24 -0700
|
||
|
Subject: [PATCH] HACK: allow apps with pre-release SDK RESTRICT AUTOMERGE
|
||
|
|
||
|
Revert before releasing
|
||
|
Let the apps built with pre-release Tiramisu SDK parse
|
||
|
+ fix a test that didn't expect REL builds to throw
|
||
|
when checking for lettered versions
|
||
|
|
||
|
Test: build
|
||
|
Bug: 225745567
|
||
|
Bug: 231407096
|
||
|
Change-Id: Ia0de2ab1a99e5f186f0d871e6225d88bf3308df6
|
||
|
---
|
||
|
|
||
|
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
|
||
|
index c15b3e0..3f4df4d 100644
|
||
|
--- a/core/java/android/content/pm/PackageParser.java
|
||
|
+++ b/core/java/android/content/pm/PackageParser.java
|
||
|
@@ -2628,6 +2628,15 @@
|
||
|
return Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||
|
}
|
||
|
|
||
|
+ // STOPSHIP: hack for the pre-release SDK
|
||
|
+ if (platformSdkCodenames.length == 0
|
||
|
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
|
||
|
+ targetCode)) {
|
||
|
+ Slog.w(TAG, "Package requires development platform " + targetCode
|
||
|
+ + ", returning current version " + Build.VERSION.SDK_INT);
|
||
|
+ return Build.VERSION.SDK_INT;
|
||
|
+ }
|
||
|
+
|
||
|
// Otherwise, we're looking at an incompatible pre-release SDK.
|
||
|
if (platformSdkCodenames.length > 0) {
|
||
|
outError[0] = "Requires development platform " + targetCode
|
||
|
@@ -2699,6 +2708,15 @@
|
||
|
return Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||
|
}
|
||
|
|
||
|
+ // STOPSHIP: hack for the pre-release SDK
|
||
|
+ if (platformSdkCodenames.length == 0
|
||
|
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
|
||
|
+ minCode)) {
|
||
|
+ Slog.w(TAG, "Package requires min development platform " + minCode
|
||
|
+ + ", returning current version " + Build.VERSION.SDK_INT);
|
||
|
+ return Build.VERSION.SDK_INT;
|
||
|
+ }
|
||
|
+
|
||
|
// Otherwise, we're looking at an incompatible pre-release SDK.
|
||
|
if (platformSdkCodenames.length > 0) {
|
||
|
outError[0] = "Requires development platform " + minCode
|
||
|
diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||
|
index 3e1c5bb..8cc4cdb 100644
|
||
|
--- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||
|
+++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
|
||
|
@@ -316,6 +316,15 @@
|
||
|
return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||
|
}
|
||
|
|
||
|
+ // STOPSHIP: hack for the pre-release SDK
|
||
|
+ if (platformSdkCodenames.length == 0
|
||
|
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
|
||
|
+ minCode)) {
|
||
|
+ Slog.w(TAG, "Parsed package requires min development platform " + minCode
|
||
|
+ + ", returning current version " + Build.VERSION.SDK_INT);
|
||
|
+ return input.success(Build.VERSION.SDK_INT);
|
||
|
+ }
|
||
|
+
|
||
|
// Otherwise, we're looking at an incompatible pre-release SDK.
|
||
|
if (platformSdkCodenames.length > 0) {
|
||
|
return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
|
||
|
@@ -368,19 +377,27 @@
|
||
|
return input.success(targetVers);
|
||
|
}
|
||
|
|
||
|
+ // If it's a pre-release SDK and the codename matches this platform, it
|
||
|
+ // definitely targets this SDK.
|
||
|
+ if (matchTargetCode(platformSdkCodenames, targetCode)) {
|
||
|
+ return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||
|
+ }
|
||
|
+
|
||
|
+ // STOPSHIP: hack for the pre-release SDK
|
||
|
+ if (platformSdkCodenames.length == 0
|
||
|
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
|
||
|
+ targetCode)) {
|
||
|
+ Slog.w(TAG, "Parsed package requires development platform " + targetCode
|
||
|
+ + ", returning current version " + Build.VERSION.SDK_INT);
|
||
|
+ return input.success(Build.VERSION.SDK_INT);
|
||
|
+ }
|
||
|
+
|
||
|
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
|
||
|
- // definitely targets this SDK.
|
||
|
- if (matchTargetCode(platformSdkCodenames, targetCode)) {
|
||
|
- return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
|
||
|
+ return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, "Bad package SDK");
|
||
|
}
|
||
|
|
||
|
// Otherwise, we're looking at an incompatible pre-release SDK.
|
||
|
diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
|
||
|
index 92c7871..687e8f7 100644
|
||
|
--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
|
||
|
+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
|
||
|
@@ -446,14 +446,14 @@
|
||
|
+ " <library \n"
|
||
|
+ " name=\"foo\"\n"
|
||
|
+ " file=\"" + mFooJar + "\"\n"
|
||
|
- + " on-bootclasspath-before=\"Q\"\n"
|
||
|
+ + " on-bootclasspath-before=\"A\"\n"
|
||
|
+ " on-bootclasspath-since=\"W\"\n"
|
||
|
+ " />\n\n"
|
||
|
+ " </permissions>";
|
||
|
parseSharedLibraries(contents);
|
||
|
assertFooIsOnlySharedLibrary();
|
||
|
SystemConfig.SharedLibraryEntry entry = mSysConfig.getSharedLibraries().get("foo");
|
||
|
- assertThat(entry.onBootclasspathBefore).isEqualTo("Q");
|
||
|
+ assertThat(entry.onBootclasspathBefore).isEqualTo("A");
|
||
|
assertThat(entry.onBootclasspathSince).isEqualTo("W");
|
||
|
}
|
||
|
|