Snap for 8730993 from dfb77726364ac6f389f02f5aaa62de294634a3d0 to mainline-tzdata3-release
Change-Id: Ia8ad2d3ac586b6cee5f6263f8306ba1a1fc12997
diff --git a/derive_classpath/derive_classpath.cpp b/derive_classpath/derive_classpath.cpp
index fba63f7..493aa42 100644
--- a/derive_classpath/derive_classpath.cpp
+++ b/derive_classpath/derive_classpath.cpp
@@ -14,8 +14,6 @@
* limitations under the License.
*/
-#define LOG_TAG "derive_classpath"
-
#include "derive_classpath.h"
#include <android-base/file.h>
#include <android-base/logging.h>
diff --git a/derive_sdk/derive_sdk.cpp b/derive_sdk/derive_sdk.cpp
index a4a1251..44ac7d1 100644
--- a/derive_sdk/derive_sdk.cpp
+++ b/derive_sdk/derive_sdk.cpp
@@ -35,14 +35,11 @@
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},
@@ -57,9 +54,6 @@
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)) {
@@ -113,20 +107,6 @@
return max;
}
-bool SetExtension(const std::string& extension_name, const ExtensionDatabase& db,
- const std::unordered_set<SdkModule>& relevant_modules,
- const std::unordered_map<SdkModule, int>& module_versions) {
- int version = GetSdkLevel(db, relevant_modules, module_versions);
- LOG(INFO) << "extension " << extension_name << " version is " << version;
-
- const std::string property_name = "build.version.extensions." + extension_name;
- if (!android::base::SetProperty(property_name, std::to_string(version))) {
- LOG(ERROR) << "failed to set sdk_info prop " << property_name;
- return false;
- }
- return true;
-}
-
bool SetSdkLevels(const std::string& mountpath) {
ExtensionDatabase db;
if (!ReadDatabase(mountpath + "/com.android.sdkext/etc/extensions_db.pb", db)) {
@@ -174,20 +154,22 @@
std::unordered_set<SdkModule> relevant_modules;
relevant_modules.insert(kRModules.begin(), kRModules.end());
- if (!SetExtension("r", db, relevant_modules, versions)) {
+
+ int version_R = GetSdkLevel(db, relevant_modules, versions);
+ LOG(INFO) << "R extension version is " << version_R;
+
+ if (!android::base::SetProperty("build.version.extensions.r",
+ std::to_string(version_R))) {
+ LOG(ERROR) << "failed to set r sdk_info prop";
return false;
}
-
relevant_modules.insert(kSModules.begin(), kSModules.end());
if (android::modules::sdklevel::IsAtLeastS()) {
- if (!SetExtension("s", db, relevant_modules, versions)) {
- return false;
- }
- }
-
- relevant_modules.insert(kTModules.begin(), kTModules.end());
- if (android::modules::sdklevel::IsAtLeastT()) {
- if (!SetExtension("t", db, relevant_modules, versions)) {
+ int version_S = GetSdkLevel(db, relevant_modules, versions);
+ LOG(INFO) << "S extension version is " << version_S;
+ if (!android::base::SetProperty("build.version.extensions.s",
+ std::to_string(version_S))) {
+ LOG(ERROR) << "failed to set s sdk_info prop";
return false;
}
}
diff --git a/derive_sdk/derive_sdk_test.cpp b/derive_sdk/derive_sdk_test.cpp
index 51e703e..d5222d6 100644
--- a/derive_sdk/derive_sdk_test.cpp
+++ b/derive_sdk/derive_sdk_test.cpp
@@ -85,22 +85,19 @@
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_ALL(int n) {
EXPECT_R(n);
EXPECT_S(n);
- EXPECT_T(n);
}
ExtensionDatabase db_;
TemporaryDir dir_;
};
+TEST_F(DeriveSdkTest, CurrentSystemImageValue) {
+ EXPECT_ALL(2);
+}
+
TEST_F(DeriveSdkTest, OneDessert_OneVersion_OneApex) {
AddExtensionVersion(3, {{SdkModule::SDK_EXTENSIONS, 2}});
EXPECT_ALL(0);
diff --git a/gen_sdk/bump_sdk.sh b/gen_sdk/bump_sdk.sh
deleted file mode 100755
index 4015324..0000000
--- a/gen_sdk/bump_sdk.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/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 3c060c9..423a221 100644
--- a/gen_sdk/extensions_db.textpb
+++ b/gen_sdk/extensions_db.textpb
@@ -124,84 +124,3 @@
}
}
}
-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 3ce6a5a..cb4c541 100644
--- a/java/android/os/ext/SdkExtensions.java
+++ b/java/android/os/ext/SdkExtensions.java
@@ -44,20 +44,15 @@
private static final int R_EXTENSION_INT;
private static final int S_EXTENSION_INT;
- private static final int T_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);
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);
- }
ALL_EXTENSION_INTS = Collections.unmodifiableMap(extensions);
}
@@ -65,7 +60,7 @@
* Values suitable as parameters for {@link #getExtensionVersion(int)}.
* @hide
*/
- @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S, VERSION_CODES.TIRAMISU })
+ @IntDef(value = { VERSION_CODES.R, VERSION_CODES.S })
@Retention(RetentionPolicy.SOURCE)
public @interface Extension {}
@@ -96,9 +91,6 @@
if (extension == VERSION_CODES.S) {
return S_EXTENSION_INT;
}
- if (extension == VERSION_CODES.TIRAMISU) {
- return T_EXTENSION_INT;
- }
return 0;
}
diff --git a/java/com/android/os/ext/testing/CurrentVersion.java b/java/com/android/os/ext/testing/CurrentVersion.java
index e0dbfb7..7086ebe 100644
--- a/java/com/android/os/ext/testing/CurrentVersion.java
+++ b/java/com/android/os/ext/testing/CurrentVersion.java
@@ -15,6 +15,7 @@
*/
package com.android.os.ext.testing;
+import java.util.Collections;
import java.util.Set;
/**
@@ -23,20 +24,8 @@
*/
public class CurrentVersion {
- /** The latest train's version */
- public static final int CURRENT_TRAIN_VERSION = 3;
-
- /** The version R shipped with (0) */
- public static final int R_BASE_VERSION = 0;
-
- /** The version S shipped with (1) */
- public static final int S_BASE_VERSION = 1;
-
- /** The version T shipped with (3) */
- public static final int T_BASE_VERSION = 3;
-
- /** The current platform's version */
- public static final int CURRENT_BASE_VERSION = CURRENT_TRAIN_VERSION;
+ /** The current extension version */
+ public static final int V = 2;
/**
* The current SDK Extension versions to expect / allow in CTS.
@@ -47,8 +36,8 @@
* When a new extension version is defined, this Set must therefore be extended to include the
* new version.
*/
- public static final Set<Integer> ALLOWED_VERSIONS_CTS =
- CURRENT_BASE_VERSION == CURRENT_TRAIN_VERSION ? Set.of(CURRENT_BASE_VERSION)
- : Set.of(CURRENT_BASE_VERSION, CURRENT_TRAIN_VERSION);
+ public static final Set<Integer> ALLOWED_VERSIONS = Collections.unmodifiableSet(Set.of(
+ V
+ ));
}
diff --git a/javatests/com/android/os/ext/Android.bp b/javatests/com/android/os/ext/Android.bp
index 27d065c..89e22af 100644
--- a/javatests/com/android/os/ext/Android.bp
+++ b/javatests/com/android/os/ext/Android.bp
@@ -24,7 +24,6 @@
"ctstestrunner-axt",
"modules-utils-build",
"test_util_current_version",
- "truth-prebuilt",
],
srcs: ["*.java"],
test_config: "CtsSdkExtensionsTestCases.xml",
diff --git a/javatests/com/android/os/ext/SdkExtensionsTest.java b/javatests/com/android/os/ext/SdkExtensionsTest.java
index 29f570b..84ed2a0 100644
--- a/javatests/com/android/os/ext/SdkExtensionsTest.java
+++ b/javatests/com/android/os/ext/SdkExtensionsTest.java
@@ -17,8 +17,7 @@
package com.android.os.ext;
import static android.os.Build.VERSION_CODES;
-import static com.android.os.ext.testing.CurrentVersion.ALLOWED_VERSIONS_CTS;
-import static com.google.common.truth.Truth.assertThat;
+import static com.android.os.ext.testing.CurrentVersion.ALLOWED_VERSIONS;
import android.os.SystemProperties;
import android.os.ext.SdkExtensions;
@@ -30,7 +29,7 @@
public class SdkExtensionsTest extends TestCase {
private static void assertCorrectVersion(int version) throws Exception {
- assertThat(ALLOWED_VERSIONS_CTS).contains(version);
+ assertTrue(ALLOWED_VERSIONS.contains(version));
}
private static void assertCorrectVersion(boolean expected, int version) throws Exception {
@@ -66,10 +65,8 @@
assertCorrectVersion(true, SdkExtensions.getExtensionVersion(VERSION_CODES.R));
assertCorrectVersion(
SdkLevel.isAtLeastS(), SdkExtensions.getExtensionVersion(VERSION_CODES.S));
- assertCorrectVersion(
- SdkLevel.isAtLeastT(), SdkExtensions.getExtensionVersion(VERSION_CODES.TIRAMISU));
- int firstUnassigned = VERSION_CODES.TIRAMISU + 1;
+ int firstUnassigned = VERSION_CODES.S + 1;
for (int sdk = firstUnassigned; sdk <= 1_000_000; sdk++) {
// No extension SDKs yet.
assertEquals(0, SdkExtensions.getExtensionVersion(sdk));
@@ -81,8 +78,6 @@
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 {
@@ -94,10 +89,6 @@
assertCorrectVersion(versions.get(VERSION_CODES.S));
expectedSize++;
}
- if (SdkLevel.isAtLeastT()) {
- assertCorrectVersion(versions.get(VERSION_CODES.TIRAMISU));
- expectedSize++;
- }
assertEquals(expectedSize, versions.size());
}
diff --git a/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java b/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
index 083f3a4..707e6d3 100644
--- a/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
+++ b/javatests/com/android/sdkext/extensions/SdkExtensionsHostTest.java
@@ -16,6 +16,8 @@
package com.android.sdkext.extensions;
+import static com.android.os.ext.testing.CurrentVersion.V;
+
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertEquals;
@@ -26,7 +28,6 @@
import android.cts.install.lib.host.InstallUtilsHost;
-import com.android.os.ext.testing.CurrentVersion;
import com.android.tests.rollback.host.AbandonSessionsRule;
import com.android.tradefed.device.ITestDevice.ApexInfo;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
@@ -50,23 +51,22 @@
private static final String APP_FILENAME = "sdkextensions_e2e_test_app.apk";
private static final String APP_PACKAGE = "com.android.sdkext.extensions.apps";
+ private static final String APP_R12_FILENAME = "sdkextensions_e2e_test_app_req_r12.apk";
+ private static final String APP_R12_PACKAGE = "com.android.sdkext.extensions.apps.r12";
+ private static final String APP_S12_FILENAME = "sdkextensions_e2e_test_app_req_s12.apk";
+ private static final String APP_S12_PACKAGE = "com.android.sdkext.extensions.apps.s12";
+ private static final String APP_R45_FILENAME = "sdkextensions_e2e_test_app_req_r45.apk";
+ private static final String APP_R45_PACKAGE = "com.android.sdkext.extensions.apps.r45";
+ private static final String APP_S45_FILENAME = "sdkextensions_e2e_test_app_req_s45.apk";
+ private static final String APP_S45_PACKAGE = "com.android.sdkext.extensions.apps.s45";
private static final String MEDIA_FILENAME = "test_com.android.media.apex";
private static final String SDKEXTENSIONS_FILENAME = "test_com.android.sdkext.apex";
- private static String appFilename(String appName) {
- return "sdkextensions_e2e_test_app_req_" + appName + ".apk";
- }
-
- private static String appPackage(String appName) {
- return "com.android.sdkext.extensions.apps." + appName;
- }
-
private static final Duration BOOT_COMPLETE_TIMEOUT = Duration.ofMinutes(2);
private final InstallUtilsHost mInstallUtils = new InstallUtilsHost(this);
private Boolean mIsAtLeastS = null;
- private Boolean mIsAtLeastT = null;
@Rule
public AbandonSessionsRule mHostTestRule = new AbandonSessionsRule(this);
@@ -105,8 +105,7 @@
// Version 45 requires sdkext + media, which isn't fulfilled
assertRVersionEquals(12);
assertSVersionEquals(12);
- assertTVersionEquals(12);
- assertTestMethodsPresent(); // 45 APIs are available on 12 too.
+ assertTrue(broadcastForBoolean("MAKE_CALLS_45", null)); // 45 APIs are available on 12 too.
}
@Test
@@ -127,13 +126,13 @@
assertVersion45();
}
- private boolean canInstallApp(String appName) throws Exception {
- File appFile = mInstallUtils.getTestFile(appFilename(appName));
+ private boolean canInstallApp(String filename, String packageName) throws Exception {
+ File appFile = mInstallUtils.getTestFile(filename);
String installResult = getDevice().installPackage(appFile, true);
if (installResult != null) {
return false;
}
- assertNull(getDevice().uninstallPackage(appPackage(appName)));
+ assertNull(getDevice().uninstallPackage(packageName));
return true;
}
@@ -176,71 +175,42 @@
}
private void assertVersionDefault() throws Exception {
- int expected = isAtLeastT() ? CurrentVersion.T_BASE_VERSION
- : isAtLeastS() ? CurrentVersion.S_BASE_VERSION
- : CurrentVersion.R_BASE_VERSION;
- assertRVersionEquals(expected);
- assertSVersionEquals(expected);
- assertTVersionEquals(expected);
- assertTestMethodsNotPresent();
+ assertRVersionEquals(V);
+ assertSVersionEquals(V);
+ assertTrue(broadcastForBoolean("MAKE_CALLS_DEFAULT", null));
}
private void assertVersion45() throws Exception {
assertRVersionEquals(45);
assertSVersionEquals(45);
- assertTVersionEquals(45);
- assertTestMethodsPresent();
- }
-
- private void assertTestMethodsNotPresent() throws Exception {
- assertTrue(broadcastForBoolean("MAKE_CALLS_DEFAULT", null));
- }
-
- private void assertTestMethodsPresent() throws Exception {
- if (isAtLeastS()) {
- assertTrue(broadcastForBoolean("MAKE_CALLS_45", null));
- } else {
- // The APIs in the test apex are not currently getting installed correctly
- // on Android R devices because they rely on the dynamic classpath feature.
- // TODO(b/234361913): fix this
- assertTestMethodsNotPresent();
- }
+ assertTrue(broadcastForBoolean("MAKE_CALLS_45", null));
}
private void assertRVersionEquals(int version) throws Exception {
- String[] apps = version >= 45 ? new String[]{"r12", "r45"} :
- version >= 12 ? new String[]{"r12"} : new String[]{};
- assertExtensionVersionEquals("r", version, apps, true);
+ int appValue = broadcastForInt("GET_SDK_VERSION", "r");
+ String syspropValue = getExtensionVersionFromSysprop("r");
+ assertEquals(version, appValue);
+ assertEquals(String.valueOf(version), syspropValue);
+ assertEquals(version >= 12, canInstallApp(APP_R12_FILENAME, APP_R12_PACKAGE));
+ assertEquals(version >= 45, canInstallApp(APP_R45_FILENAME, APP_R45_PACKAGE));
}
private void assertSVersionEquals(int version) throws Exception {
- // These APKs require the same R version as they do S version.
- int minVersion = Math.min(version, broadcastForInt("GET_SDK_VERSION", "r"));
- String[] apps = minVersion >= 45 ? new String[]{"s12", "s45"}
- : minVersion >= 12 ? new String[]{"s12"} : new String[]{};
- 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);
- String syspropValue = getExtensionVersionFromSysprop(extension);
- if (expected) {
+ int appValue = broadcastForInt("GET_SDK_VERSION", "s");
+ String syspropValue = getExtensionVersionFromSysprop("s");
+ if (isAtLeastS()) {
assertEquals(version, appValue);
assertEquals(String.valueOf(version), syspropValue);
- for (String app : apps) {
- assertTrue(canInstallApp(app));
- }
+
+ // These APKs require the same R version as they do S version.
+ int minVersion = Math.min(version, broadcastForInt("GET_SDK_VERSION", "r"));
+ assertEquals(minVersion >= 12, canInstallApp(APP_S12_FILENAME, APP_S12_PACKAGE));
+ assertEquals(minVersion >= 45, canInstallApp(APP_S45_FILENAME, APP_S45_PACKAGE));
} else {
assertEquals(0, appValue);
assertEquals("", syspropValue);
- for (String app : apps) {
- assertFalse(canInstallApp(app));
- }
+ assertFalse(canInstallApp(APP_S12_FILENAME, APP_S12_PACKAGE));
+ assertFalse(canInstallApp(APP_S45_FILENAME, APP_S45_PACKAGE));
}
}
@@ -261,13 +231,6 @@
return mIsAtLeastS;
}
- private boolean isAtLeastT() throws Exception {
- if (mIsAtLeastT == null) {
- mIsAtLeastT = broadcastForBoolean("IS_AT_LEAST", "t");
- }
- return mIsAtLeastT;
- }
-
private boolean uninstallApexes(String... filenames) throws Exception {
boolean reboot = false;
for (String filename : filenames) {
diff --git a/javatests/com/android/sdkext/extensions/apps/Receiver.java b/javatests/com/android/sdkext/extensions/apps/Receiver.java
index 5f47b9c..4c81363 100644
--- a/javatests/com/android/sdkext/extensions/apps/Receiver.java
+++ b/javatests/com/android/sdkext/extensions/apps/Receiver.java
@@ -41,7 +41,6 @@
switch (letter) {
case 'r': return Build.VERSION_CODES.R;
case 's': return Build.VERSION_CODES.S;
- case 't': return Build.VERSION_CODES.TIRAMISU;
}
throw new IllegalArgumentException(String.valueOf(letter));
}
@@ -50,7 +49,6 @@
switch (letter) {
case 'r': return true; // our min sdk version is 30
case 's': return SdkLevel.isAtLeastS();
- case 't': return SdkLevel.isAtLeastT();
}
return false;
}
diff --git a/manifest.json b/manifest.json
index 3aabdf0..01062af 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.sdkext",
- "version": 339990000
+ "version": 319999900
}