Setting apex version to the placeholder value am: d03b7b48c6
Original change: https://android-review.googlesource.com/c/platform/packages/modules/SdkExtensions/+/2145794
Change-Id: I943317f26085f14749a5783e5707f237aac4eff8
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/derive_sdk/derive_sdk.cpp b/derive_sdk/derive_sdk.cpp
index 3d3efdb..a6eaeb2 100644
--- a/derive_sdk/derive_sdk.cpp
+++ b/derive_sdk/derive_sdk.cpp
@@ -35,11 +35,14 @@
namespace derivesdk {
static const std::unordered_map<std::string, SdkModule> kApexNameToModule = {
+ {"com.android.adservices", SdkModule::AD_SERVICES},
+ {"com.android.appsearch", SdkModule::APPSEARCH},
{"com.android.art", SdkModule::ART},
{"com.android.conscrypt", SdkModule::CONSCRYPT},
{"com.android.ipsec", SdkModule::IPSEC},
{"com.android.media", SdkModule::MEDIA},
{"com.android.mediaprovider", SdkModule::MEDIA_PROVIDER},
+ {"com.android.ondevicepersonalization", SdkModule::ON_DEVICE_PERSONALIZATION},
{"com.android.permission", SdkModule::PERMISSIONS},
{"com.android.scheduling", SdkModule::SCHEDULING},
{"com.android.sdkext", SdkModule::SDK_EXTENSIONS},
@@ -54,6 +57,9 @@
static const std::unordered_set<SdkModule> kSModules = {SdkModule::ART, SdkModule::SCHEDULING};
+static const std::unordered_set<SdkModule> kTModules = {
+ SdkModule::AD_SERVICES, SdkModule::APPSEARCH, SdkModule::ON_DEVICE_PERSONALIZATION};
+
bool ReadDatabase(const std::string& db_path, ExtensionDatabase& db) {
std::string contents;
if (!android::base::ReadFileToString(db_path, &contents, true)) {
@@ -179,6 +185,13 @@
}
}
+ relevant_modules.insert(kTModules.begin(), kTModules.end());
+ if (android::modules::sdklevel::IsAtLeastT()) {
+ if (!SetExtension("t", db, relevant_modules, versions)) {
+ return false;
+ }
+ }
+
// Consistency check: verify all modules with requirements is included in some dessert
for (const auto& ext_version : db.versions()) {
for (const auto& requirement : ext_version.requirements()) {
@@ -190,6 +203,14 @@
}
}
+ relevant_modules.clear();
+ relevant_modules.insert(SdkModule::AD_SERVICES);
+ if (android::modules::sdklevel::IsAtLeastT()) {
+ if (!SetExtension("ad_services", db, relevant_modules, versions)) {
+ return false;
+ }
+ }
+
return true;
}
diff --git a/derive_sdk/derive_sdk_test.cpp b/derive_sdk/derive_sdk_test.cpp
index 015d887..e7fe5ba 100644
--- a/derive_sdk/derive_sdk_test.cpp
+++ b/derive_sdk/derive_sdk_test.cpp
@@ -85,9 +85,22 @@
EXPECT_EQ(S, android::modules::sdklevel::IsAtLeastS() ? n : -1);
}
+ void EXPECT_T(int n) {
+ int T = android::base::GetIntProperty("build.version.extensions.t", -1);
+ // Only expect the T extension level to be set on T+ devices.
+ EXPECT_EQ(T, android::modules::sdklevel::IsAtLeastT() ? n : -1);
+ }
+
+ void EXPECT_ADSERVICES(int n) {
+ int A = android::base::GetIntProperty("build.version.extensions.ad_services", -1);
+ // Only expect the AdServices extension level to be set on T+ devices.
+ EXPECT_EQ(A, android::modules::sdklevel::IsAtLeastT() ? n : -1);
+ }
+
void EXPECT_ALL(int n) {
EXPECT_R(n);
EXPECT_S(n);
+ EXPECT_T(n);
}
ExtensionDatabase db_;
@@ -213,6 +226,43 @@
ASSERT_FALSE(android::derivesdk::SetSdkLevels(dir()));
}
+TEST_F(DeriveSdkTest, AdServices) {
+ AddExtensionVersion(1, {
+ {SdkModule::TETHERING, 1},
+ });
+ EXPECT_ALL(0);
+ EXPECT_ADSERVICES(1);
+
+ SetApexVersion("com.android.tethering", 1);
+ EXPECT_ALL(1);
+
+ // V2 defined
+ AddExtensionVersion(2, {
+ {SdkModule::AD_SERVICES, 2},
+ {SdkModule::TETHERING, 2},
+ });
+ EXPECT_ALL(1);
+ EXPECT_ADSERVICES(1);
+
+ // Only adservices v2
+ SetApexVersion("com.android.adservices", 2);
+ EXPECT_ALL(1);
+ EXPECT_ADSERVICES(2);
+
+ // Both v2
+ SetApexVersion("com.android.tethering", 2);
+ EXPECT_ALL(2);
+ EXPECT_ADSERVICES(2);
+
+ // Only tethering v2. R and S extension are bumped, but T requires adserices.
+ SetApexVersion("com.android.adservices", 0);
+ SetApexVersion("com.android.tethering", 2);
+ EXPECT_R(2);
+ EXPECT_S(2);
+ EXPECT_T(1);
+ EXPECT_ADSERVICES(1);
+}
+
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
diff --git a/gen_sdk/bump_sdk.sh b/gen_sdk/bump_sdk.sh
new file mode 100755
index 0000000..4015324
--- /dev/null
+++ b/gen_sdk/bump_sdk.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+if ! [ -e build/soong ]; then
+ echo "This script must be run from the top of the tree"
+ exit 1
+fi
+
+sdk="$1"
+if [[ -z "$sdk" ]]; then
+ echo "usage: $0 <new-sdk-int> [bug-id]"
+ exit 1
+fi
+
+bug_text=$(test -n "$2" && echo "\nBug: $2")
+
+SDKEXT="packages/modules/SdkExtensions/"
+
+TARGET_PRODUCT=aosp_arm64 build/soong/soong_ui.bash --make-mode --soong-only gen_sdk
+out/soong/host/linux-x86/bin/gen_sdk \
+ --database ${SDKEXT}/gen_sdk/extensions_db.textpb \
+ --action new_sdk \
+ --sdk "$sdk"
+sed -E -i -e "/CurrentSystemImageValue/{n;s/[0-9]+/${sdk}/}" \
+ ${SDKEXT}/derive_sdk/derive_sdk_test.cpp
+sed -E -i -e "/public static final int V = /{s/\S+;/${sdk};/}" \
+ ${SDKEXT}/java/com/android/os/ext/testing/CurrentVersion.java
+repo start bump-ext ${SDKEXT}
+
+message="Bump SDK Extension version to ${sdk}
+
+Generated with:
+$ $0 $@
+
+Database update generated with:
+$ gen_sdk --action new_sdk --sdk $sdk
+"
+message+=$(test -n "$2" && echo -e "\nBug: $2")
+message+=$(echo -e "\nTest: presubmit")
+
+git -C ${SDKEXT} commit -a -m "$message"
\ No newline at end of file
diff --git a/gen_sdk/extensions_db.textpb b/gen_sdk/extensions_db.textpb
index 5d54a58..3c060c9 100644
--- a/gen_sdk/extensions_db.textpb
+++ b/gen_sdk/extensions_db.textpb
@@ -61,3 +61,147 @@
}
}
}
+versions {
+ version: 2
+ requirements {
+ module: ART
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: CONSCRYPT
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: IPSEC
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: MEDIA
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: MEDIA_PROVIDER
+ version {
+ version: 2
+ }
+ }
+ requirements {
+ module: PERMISSIONS
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: SCHEDULING
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: SDK_EXTENSIONS
+ version {
+ version: 2
+ }
+ }
+ requirements {
+ module: STATSD
+ version {
+ version: 1
+ }
+ }
+ requirements {
+ module: TETHERING
+ version {
+ version: 1
+ }
+ }
+}
+versions {
+ version: 3
+ requirements {
+ module: ART
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: CONSCRYPT
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: IPSEC
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: MEDIA
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: MEDIA_PROVIDER
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: PERMISSIONS
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: SCHEDULING
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: SDK_EXTENSIONS
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: STATSD
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: TETHERING
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: AD_SERVICES
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: APPSEARCH
+ version {
+ version: 3
+ }
+ }
+ requirements {
+ module: ON_DEVICE_PERSONALIZATION
+ version {
+ version: 3
+ }
+ }
+}
diff --git a/java/android/os/ext/SdkExtensions.java b/java/android/os/ext/SdkExtensions.java
index cb4c541..df68e0b 100644
--- a/java/android/os/ext/SdkExtensions.java
+++ b/java/android/os/ext/SdkExtensions.java
@@ -42,17 +42,29 @@
*/
public class SdkExtensions {
+ // TODO(b/234007262): Decide on the right final value for this.
+ public static final int AD_SERVICES = 1_000_000;
+
private static final int R_EXTENSION_INT;
private static final int S_EXTENSION_INT;
+ private static final int T_EXTENSION_INT;
+ private static final int AD_SERVICES_EXTENSION_INT;
private static final Map<Integer, Integer> ALL_EXTENSION_INTS;
static {
R_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.r", 0);
S_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.s", 0);
+ T_EXTENSION_INT = SystemProperties.getInt("build.version.extensions.t", 0);
+ AD_SERVICES_EXTENSION_INT =
+ SystemProperties.getInt("build.version.extensions.ad_services", 0);
Map<Integer, Integer> extensions = new HashMap<Integer, Integer>();
extensions.put(VERSION_CODES.R, R_EXTENSION_INT);
if (SdkLevel.isAtLeastS()) {
extensions.put(VERSION_CODES.S, S_EXTENSION_INT);
}
+ if (SdkLevel.isAtLeastT()) {
+ extensions.put(VERSION_CODES.TIRAMISU, T_EXTENSION_INT);
+ }
+ extensions.put(AD_SERVICES, AD_SERVICES_EXTENSION_INT);
ALL_EXTENSION_INTS = Collections.unmodifiableMap(extensions);
}
@@ -60,7 +72,7 @@
* Values suitable as parameters for {@link #getExtensionVersion(int)}.
* @hide
*/
- @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S })
+ @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S, VERSION_CODES.TIRAMISU, AD_SERVICES })
@Retention(RetentionPolicy.SOURCE)
public @interface Extension {}
@@ -91,6 +103,12 @@
if (extension == VERSION_CODES.S) {
return S_EXTENSION_INT;
}
+ if (extension == VERSION_CODES.TIRAMISU) {
+ return T_EXTENSION_INT;
+ }
+ if (extension == AD_SERVICES) {
+ return AD_SERVICES_EXTENSION_INT;
+ }
return 0;
}
diff --git a/java/android/os/ext/api/current.txt b/java/android/os/ext/api/current.txt
index 180afea..75b43ba 100644
--- a/java/android/os/ext/api/current.txt
+++ b/java/android/os/ext/api/current.txt
@@ -4,6 +4,7 @@
public class SdkExtensions {
method @NonNull public static java.util.Map<java.lang.Integer,java.lang.Integer> getAllExtensionVersions();
method public static int getExtensionVersion(int);
+ field public static final int AD_SERVICES = 1000000; // 0xf4240
}
}
diff --git a/java/com/android/os/ext/testing/CurrentVersion.java b/java/com/android/os/ext/testing/CurrentVersion.java
index 1a6c93a..e0dbfb7 100644
--- a/java/com/android/os/ext/testing/CurrentVersion.java
+++ b/java/com/android/os/ext/testing/CurrentVersion.java
@@ -15,7 +15,6 @@
*/
package com.android.os.ext.testing;
-import java.util.Collections;
import java.util.Set;
/**
@@ -37,7 +36,7 @@
public static final int T_BASE_VERSION = 3;
/** The current platform's version */
- public static final int CURRENT_BASE_VERSION = S_BASE_VERSION;
+ public static final int CURRENT_BASE_VERSION = CURRENT_TRAIN_VERSION;
/**
* The current SDK Extension versions to expect / allow in CTS.
diff --git a/javatests/com/android/os/ext/SdkExtensionsTest.java b/javatests/com/android/os/ext/SdkExtensionsTest.java
index 649eb29..571e439 100644
--- a/javatests/com/android/os/ext/SdkExtensionsTest.java
+++ b/javatests/com/android/os/ext/SdkExtensionsTest.java
@@ -17,6 +17,11 @@
package com.android.os.ext;
import static android.os.Build.VERSION_CODES;
+import static android.os.Build.VERSION_CODES.R;
+import static android.os.Build.VERSION_CODES.S;
+import static android.os.Build.VERSION_CODES.TIRAMISU;
+import static android.os.ext.SdkExtensions.AD_SERVICES;
+import static android.os.ext.SdkExtensions.getExtensionVersion;
import static com.android.os.ext.testing.CurrentVersion.ALLOWED_VERSIONS_CTS;
import static com.google.common.truth.Truth.assertThat;
@@ -63,12 +68,16 @@
/** Verifies that getExtensionVersion only return existing versions */
public void testValidValues() throws Exception {
- assertCorrectVersion(true, SdkExtensions.getExtensionVersion(VERSION_CODES.R));
- assertCorrectVersion(
- SdkLevel.isAtLeastS(), SdkExtensions.getExtensionVersion(VERSION_CODES.S));
+ assertCorrectVersion(true, getExtensionVersion(R));
+ assertCorrectVersion(SdkLevel.isAtLeastS(), getExtensionVersion(S));
+ assertCorrectVersion(SdkLevel.isAtLeastT(), getExtensionVersion(TIRAMISU));
+ assertCorrectVersion(SdkLevel.isAtLeastT(), getExtensionVersion(AD_SERVICES));
- int firstUnassigned = VERSION_CODES.S + 1;
- for (int sdk = firstUnassigned; sdk <= 1_000_000; sdk++) {
+ Set<Integer> assignedCodes = Set.of(R, S, TIRAMISU, AD_SERVICES);
+ for (int sdk = VERSION_CODES.R; sdk <= 1_000_000; sdk++) {
+ if (assignedCodes.contains(sdk)) {
+ continue;
+ }
// No extension SDKs yet.
assertEquals(0, SdkExtensions.getExtensionVersion(sdk));
}
@@ -79,6 +88,8 @@
assertCorrectVersion(true, SystemProperties.get("build.version.extensions.r"));
assertCorrectVersion(
SdkLevel.isAtLeastS(), SystemProperties.get("build.version.extensions.s"));
+ assertCorrectVersion(
+ SdkLevel.isAtLeastT(), SystemProperties.get("build.version.extensions.t"));
}
public void testExtensionVersions() throws Exception {
@@ -90,6 +101,12 @@
assertCorrectVersion(versions.get(VERSION_CODES.S));
expectedSize++;
}
+ if (SdkLevel.isAtLeastT()) {
+ assertCorrectVersion(versions.get(VERSION_CODES.TIRAMISU));
+ expectedSize++;
+ assertCorrectVersion(versions.get(SdkExtensions.AD_SERVICES));
+ expectedSize++;
+ }
assertEquals(expectedSize, versions.size());
}
diff --git a/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java b/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
index ec06578..083f3a4 100644
--- a/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
+++ b/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
@@ -105,7 +105,8 @@
// Version 45 requires sdkext + media, which isn't fulfilled
assertRVersionEquals(12);
assertSVersionEquals(12);
- assertTrue(broadcastForBoolean("MAKE_CALLS_45", null)); // 45 APIs are available on 12 too.
+ assertTVersionEquals(12);
+ assertTestMethodsPresent(); // 45 APIs are available on 12 too.
}
@Test
@@ -175,16 +176,19 @@
}
private void assertVersionDefault() throws Exception {
- int expected = isAtLeastS() ? CurrentVersion.S_BASE_VERSION
+ int expected = isAtLeastT() ? CurrentVersion.T_BASE_VERSION
+ : isAtLeastS() ? CurrentVersion.S_BASE_VERSION
: CurrentVersion.R_BASE_VERSION;
assertRVersionEquals(expected);
assertSVersionEquals(expected);
+ assertTVersionEquals(expected);
assertTestMethodsNotPresent();
}
private void assertVersion45() throws Exception {
assertRVersionEquals(45);
assertSVersionEquals(45);
+ assertTVersionEquals(45);
assertTestMethodsPresent();
}
@@ -217,6 +221,10 @@
assertExtensionVersionEquals("s", version, apps, isAtLeastS());
}
+ private void assertTVersionEquals(int version) throws Exception {
+ assertExtensionVersionEquals("t", version, new String[]{}, isAtLeastT());
+ }
+
private void assertExtensionVersionEquals(String extension, int version, String[] apps,
boolean expected) throws Exception {
int appValue = broadcastForInt("GET_SDK_VERSION", extension);