xref: /aosp_15_r20/build/make/tools/finalization/frameworks_base.apply_hack.diff (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1From 3c9a5321dc94124367f2f4363d85a8f488f5d4d1 Mon Sep 17 00:00:00 2001
2From: Yurii Zubrytskyi <[email protected]>
3Date: Wed, 04 May 2022 01:05:24 -0700
4Subject: [PATCH] HACK: allow apps with pre-release SDK RESTRICT AUTOMERGE
5
6Revert before releasing
7Let the apps built with pre-release Tiramisu SDK parse
8+ fix a test that didn't expect REL builds to throw
9  when checking for lettered versions
10
11Test: build
12Bug: 225745567
13Bug: 231407096
14Change-Id: Ia0de2ab1a99e5f186f0d871e6225d88bf3308df6
15---
16
17diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
18index c15b3e0..3f4df4d 100644
19--- a/core/java/android/content/pm/PackageParser.java
20+++ b/core/java/android/content/pm/PackageParser.java
21@@ -2628,6 +2628,15 @@
22             return Build.VERSION_CODES.CUR_DEVELOPMENT;
23         }
24
25+        // STOPSHIP: hack for the pre-release SDK
26+        if (platformSdkCodenames.length == 0
27+                && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
28+                targetCode)) {
29+            Slog.w(TAG, "Package requires development platform " + targetCode
30+                    + ", returning current version " + Build.VERSION.SDK_INT);
31+            return Build.VERSION.SDK_INT;
32+        }
33+
34         // Otherwise, we're looking at an incompatible pre-release SDK.
35         if (platformSdkCodenames.length > 0) {
36             outError[0] = "Requires development platform " + targetCode
37@@ -2699,6 +2708,15 @@
38             return Build.VERSION_CODES.CUR_DEVELOPMENT;
39         }
40
41+        // STOPSHIP: hack for the pre-release SDK
42+        if (platformSdkCodenames.length == 0
43+                && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
44+                minCode)) {
45+            Slog.w(TAG, "Package requires min development platform " + minCode
46+                    + ", returning current version " + Build.VERSION.SDK_INT);
47+            return Build.VERSION.SDK_INT;
48+        }
49+
50         // Otherwise, we're looking at an incompatible pre-release SDK.
51         if (platformSdkCodenames.length > 0) {
52             outError[0] = "Requires development platform " + minCode
53diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
54index 3e1c5bb..8cc4cdb 100644
55--- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
56+++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
57@@ -316,6 +316,15 @@
58             return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
59         }
60
61+        // STOPSHIP: hack for the pre-release SDK
62+        if (platformSdkCodenames.length == 0
63+                && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
64+                        minCode)) {
65+            Slog.w(TAG, "Parsed package requires min development platform " + minCode
66+                    + ", returning current version " + Build.VERSION.SDK_INT);
67+            return input.success(Build.VERSION.SDK_INT);
68+        }
69+
70         // Otherwise, we're looking at an incompatible pre-release SDK.
71         if (platformSdkCodenames.length > 0) {
72             return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
73@@ -368,19 +377,27 @@
74             return input.success(targetVers);
75         }
76
77+        // If it's a pre-release SDK and the codename matches this platform, it
78+        // definitely targets this SDK.
79+        if (matchTargetCode(platformSdkCodenames, targetCode)) {
80+            return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
81+        }
82+
83+        // STOPSHIP: hack for the pre-release SDK
84+        if (platformSdkCodenames.length == 0
85+                && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
86+                        targetCode)) {
87+            Slog.w(TAG, "Parsed package requires development platform " + targetCode
88+                    + ", returning current version " + Build.VERSION.SDK_INT);
89+            return input.success(Build.VERSION.SDK_INT);
90+        }
91+
92         try {
93             if (allowUnknownCodenames && UnboundedSdkLevel.isAtMost(targetCode)) {
94                 return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
95             }
96         } catch (IllegalArgumentException e) {
97-            // isAtMost() throws it when encountering an older SDK codename
98-            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, e.getMessage());
99-        }
100-
101-        // If it's a pre-release SDK and the codename matches this platform, it
102-        // definitely targets this SDK.
103-        if (matchTargetCode(platformSdkCodenames, targetCode)) {
104-            return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
105+            return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, "Bad package SDK");
106         }
107
108         // Otherwise, we're looking at an incompatible pre-release SDK.
109diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
110index 92c7871..687e8f7 100644
111--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
112+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
113@@ -446,14 +446,14 @@
114                         + "    <library \n"
115                         + "        name=\"foo\"\n"
116                         + "        file=\"" + mFooJar + "\"\n"
117-                        + "        on-bootclasspath-before=\"Q\"\n"
118+                        + "        on-bootclasspath-before=\"A\"\n"
119                         + "        on-bootclasspath-since=\"W\"\n"
120                         + "     />\n\n"
121                         + " </permissions>";
122         parseSharedLibraries(contents);
123         assertFooIsOnlySharedLibrary();
124         SystemConfig.SharedLibraryEntry entry = mSysConfig.getSharedLibraries().get("foo");
125-        assertThat(entry.onBootclasspathBefore).isEqualTo("Q");
126+        assertThat(entry.onBootclasspathBefore).isEqualTo("A");
127         assertThat(entry.onBootclasspathSince).isEqualTo("W");
128     }
129
130