Merge "Revert "Derestrict nativeFillInStackTrace.""
diff --git a/dalvik/src/main/java/dalvik/annotation/compat/VersionCodes.java b/dalvik/src/main/java/dalvik/annotation/compat/VersionCodes.java
index dc6bd35..1d4a45c 100644
--- a/dalvik/src/main/java/dalvik/annotation/compat/VersionCodes.java
+++ b/dalvik/src/main/java/dalvik/annotation/compat/VersionCodes.java
@@ -15,7 +15,6 @@
*/
package dalvik.annotation.compat;
-import libcore.api.CorePlatformApi;
import libcore.api.IntraCoreApi;
/**
@@ -30,7 +29,6 @@
*
* {@hide}
*/
-@CorePlatformApi
@IntraCoreApi
public class VersionCodes {
@@ -38,30 +36,33 @@
}
/**
+ * The version code for current development build, which has not yet turned into an official
+ * release.
+ */
+ @IntraCoreApi
+ public static final int CUR_DEVELOPMENT = 10000;
+
+ /**
* The version code for Android Oreo (API version 26).
*/
- @CorePlatformApi
@IntraCoreApi
public static final int O = 26;
/**
* The version code for Android Pie (API version 28).
*/
- @CorePlatformApi
@IntraCoreApi
public static final int P = 28;
/**
* The version code for Android Q (API version 29).
*/
- @CorePlatformApi
@IntraCoreApi
public static final int Q = 29;
/**
* The version code for Android R (API version 30).
*/
- @CorePlatformApi
@IntraCoreApi
public static final int R = 30;
}
diff --git a/dalvik/src/main/java/dalvik/system/AppSpecializationHooks.java b/dalvik/src/main/java/dalvik/system/AppSpecializationHooks.java
new file mode 100644
index 0000000..3f6cad3
--- /dev/null
+++ b/dalvik/src/main/java/dalvik/system/AppSpecializationHooks.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dalvik.system;
+
+import libcore.api.CorePlatformApi;
+
+/**
+ * Used by frameworks to specialize libcore in an app process.
+ *
+ * @hide
+ */
+@CorePlatformApi
+public class AppSpecializationHooks {
+
+ /**
+ * Called in {@link android.app.ActivityThread}, but before binding the application. This method
+ * should be called only after {@link android.compat.Compatibility#setCallbacks}
+ * has been invoked to handle the app compat queries from
+ * {@link android.compat.Compatibility#isChangeEnabled(long)}.
+ *
+ * This is a good place to change system properties / clear cache due to an app compat change
+ * before an app starts.
+ */
+ @CorePlatformApi
+ public static void handleCompatChangesBeforeBindingApplication() {
+ com.android.i18n.system.AppSpecializationHooks
+ .handleCompatChangesBeforeBindingApplication();
+ }
+}
diff --git a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
index 6fe5cc9..21a4616 100644
--- a/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
+++ b/dalvik/src/main/java/dalvik/system/ZygoteHooks.java
@@ -16,6 +16,8 @@
package dalvik.system;
+import libcore.icu.ICU;
+
import java.io.File;
import java.io.FileDescriptor;
import java.lang.reflect.Method;
@@ -52,6 +54,8 @@
public static void onBeginPreload() {
com.android.i18n.system.ZygoteHooks.onBeginPreload();
+ ICU.initializeCacheInZygote();
+
// Look up JaCoCo on the boot classpath, if it exists. This will be used later for enabling
// memory-mapped Java coverage.
try {
diff --git a/luni/src/main/java/libcore/icu/ICU.java b/luni/src/main/java/libcore/icu/ICU.java
index ccbe595..4996431 100644
--- a/luni/src/main/java/libcore/icu/ICU.java
+++ b/luni/src/main/java/libcore/icu/ICU.java
@@ -51,11 +51,23 @@
private static String[] isoLanguages;
+ /**
+ * Avoid initialization with many dependencies here, because when this is called,
+ * lower-level classes, e.g. java.lang.System, are not initialized and java.lang.System
+ * relies on getIcuVersion().
+ */
static {
+
+ }
+
+ private ICU() {
+ }
+
+ public static void initializeCacheInZygote() {
// Fill CACHED_PATTERNS with the patterns from default locale and en-US initially.
- // Likely, this is initialized in Zygote and the initial values in the cache can be shared
- // among app. The cache was filled by LocaleData in the older Android platform, but moved to
- // here, due to an performance issue http://b/161846393.
+ // This should be called in Zygote pre-fork process and the initial values in the cache
+ // can be shared among app. The cache was filled by LocaleData in the older Android platform,
+ // but moved here, due to an performance issue http://b/161846393.
// It initializes 2 x 4 = 8 values in the CACHED_PATTERNS whose max size should be >= 8.
for (Locale locale : new Locale[] {Locale.US, Locale.getDefault()}) {
getTimePattern(locale, false, false);
@@ -65,9 +77,6 @@
}
}
- private ICU() {
- }
-
/**
* Returns an array of two-letter ISO 639-1 language codes, either from ICU or our cache.
*/
@@ -363,6 +372,22 @@
return result;
}
+ /**
+ * Returns the version of the CLDR data in use, such as "22.1.1".
+ *
+ */
+ public static native String getCldrVersion();
+
+ /**
+ * Returns the icu4c version in use, such as "50.1.1".
+ */
+ public static native String getIcuVersion();
+
+ /**
+ * Returns the Unicode version our ICU supports, such as "6.2".
+ */
+ public static native String getUnicodeVersion();
+
// --- Errors.
// --- Native methods accessing ICU's database.
diff --git a/luni/src/main/java/libcore/util/ZoneInfo.java b/luni/src/main/java/libcore/util/ZoneInfo.java
index d277797..013ee61 100644
--- a/luni/src/main/java/libcore/util/ZoneInfo.java
+++ b/luni/src/main/java/libcore/util/ZoneInfo.java
@@ -46,6 +46,19 @@
* @hide - used to implement TimeZone
*/
public final class ZoneInfo extends TimeZone {
+ private static final long MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
+ private static final long MILLISECONDS_PER_400_YEARS =
+ MILLISECONDS_PER_DAY * (400 * 365 + 100 - 3);
+
+ private static final long UNIX_OFFSET = 62167219200000L;
+
+ private static final int[] NORMAL = new int[] {
+ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
+ };
+
+ private static final int[] LEAP = new int[] {
+ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335,
+ };
// Proclaim serialization compatibility with pre-OpenJDK AOSP
static final long serialVersionUID = -4598738130123921552L;
@@ -100,7 +113,31 @@
@Override
public int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis) {
- return mDelegate.getOffset(era, year, month, day, dayOfWeek, millis);
+ // XXX This assumes Gregorian always; Calendar switches from
+ // Julian to Gregorian in 1582. What calendar system are the
+ // arguments supposed to come from?
+
+ long calc = (year / 400) * MILLISECONDS_PER_400_YEARS;
+ year %= 400;
+
+ calc += year * (365 * MILLISECONDS_PER_DAY);
+ calc += ((year + 3) / 4) * MILLISECONDS_PER_DAY;
+
+ if (year > 0) {
+ calc -= ((year - 1) / 100) * MILLISECONDS_PER_DAY;
+ }
+
+ boolean isLeap = (year == 0 || (year % 4 == 0 && year % 100 != 0));
+ int[] mlen = isLeap ? LEAP : NORMAL;
+
+ calc += mlen[month] * MILLISECONDS_PER_DAY;
+ calc += (day - 1) * MILLISECONDS_PER_DAY;
+ calc += millis;
+
+ calc -= mDelegate.getRawOffset();
+ calc -= UNIX_OFFSET;
+
+ return mDelegate.getOffset(calc);
}
@Override
diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp
index 5a84103..36eb829 100644
--- a/luni/src/main/native/libcore_icu_ICU.cpp
+++ b/luni/src/main/native/libcore_icu_ICU.cpp
@@ -30,8 +30,11 @@
#include "JniException.h"
#include "ScopedIcuULoc.h"
#include "unicode/char16ptr.h"
+#include "unicode/uchar.h"
#include "unicode/uloc.h"
+#include "unicode/ulocdata.h"
#include "unicode/ustring.h"
+#include "unicode/uversion.h"
#define U_ICUDATA_CURR U_ICUDATA_NAME "-" "curr"
@@ -84,14 +87,42 @@
return env->NewStringUTF(uloc_getDefault());
}
+static jstring versionString(JNIEnv* env, const UVersionInfo& version) {
+ char versionString[U_MAX_VERSION_STRING_LENGTH];
+ u_versionToString(const_cast<UVersionInfo&>(version), &versionString[0]);
+ return env->NewStringUTF(versionString);
+}
+
+static jstring ICU_getCldrVersion(JNIEnv* env, jclass) {
+ UErrorCode status = U_ZERO_ERROR;
+ UVersionInfo cldrVersion;
+ ulocdata_getCLDRVersion(cldrVersion, &status);
+ return versionString(env, cldrVersion);
+}
+
+static jstring ICU_getIcuVersion(JNIEnv* env, jclass) {
+ UVersionInfo icuVersion;
+ u_getVersion(icuVersion);
+ return versionString(env, icuVersion);
+}
+
+static jstring ICU_getUnicodeVersion(JNIEnv* env, jclass) {
+ UVersionInfo unicodeVersion;
+ u_getUnicodeVersion(unicodeVersion);
+ return versionString(env, unicodeVersion);
+}
+
static JNINativeMethod gMethods[] = {
NATIVE_METHOD(ICU, getAvailableLocalesNative, "()[Ljava/lang/String;"),
+ NATIVE_METHOD(ICU, getCldrVersion, "()Ljava/lang/String;"),
NATIVE_METHOD(ICU, getDefaultLocale, "()Ljava/lang/String;"),
+ NATIVE_METHOD(ICU, getIcuVersion, "()Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISO3Country, "(Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISO3Language, "(Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISOCountriesNative, "()[Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISOLanguagesNative, "()[Ljava/lang/String;"),
NATIVE_METHOD(ICU, getScript, "(Ljava/lang/String;)Ljava/lang/String;"),
+ NATIVE_METHOD(ICU, getUnicodeVersion, "()Ljava/lang/String;"),
};
void register_libcore_icu_ICU(JNIEnv* env) {
diff --git a/luni/src/test/java/libcore/java/lang/SystemTest.java b/luni/src/test/java/libcore/java/lang/SystemTest.java
index 939a9f3..fa69c07 100644
--- a/luni/src/test/java/libcore/java/lang/SystemTest.java
+++ b/luni/src/test/java/libcore/java/lang/SystemTest.java
@@ -247,6 +247,21 @@
assertNull(System.getProperty("p1"));
}
+ /**
+ * Assert that the following ICU-related system properties exist
+ */
+ public void testSystemProperties_getProperties_icu() {
+ String icuVersion = System.getProperty("android.icu.library.version");
+ assertNotNull(icuVersion);
+ assertTrue(icuVersion.length() > 0);
+ String unicodeVersion = System.getProperty("android.icu.unicode.version");
+ assertNotNull(unicodeVersion);
+ assertTrue(unicodeVersion.length() > 0);
+ String cldrVersion = System.getProperty("android.icu.cldr.version");
+ assertNotNull(cldrVersion);
+ assertTrue(cldrVersion.length() > 0);
+ }
+
public void testSystem_setSecurityManager_null_noException() {
System.setSecurityManager(null);
}
diff --git a/luni/src/test/java/tests/security/cert/X509Certificate2Test.java b/luni/src/test/java/tests/security/cert/X509Certificate2Test.java
index bf736d5..c1f5993 100644
--- a/luni/src/test/java/tests/security/cert/X509Certificate2Test.java
+++ b/luni/src/test/java/tests/security/cert/X509Certificate2Test.java
@@ -110,44 +110,47 @@
+ "XEa7ONzcHQTYTG10poHfOK/a0BaULF3GlctDESilwQYbW5BdfpAlZpbH"
+ "AFLcUDh6Eq50kc0A/anh/j3mgBNuvbIMo7hHNnZB6k/prswm2BszyLD"
+ "yw==";
- private static String CERT_CORRECT =
- "-----BEGIN CERTIFICATE-----\n"
- + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a"
- + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF"
- + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE"
- + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD"
- + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAYGBFUdIAAwZwYDVR0RAQH/B"
- + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG"
- + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY"
- + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG"
- + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB"
- + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw"
- + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE"
- + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h"
- + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd"
- + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1"
- + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwGByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP"
- + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n"
- + "-----END CERTIFICATE-----";
+ private static String CERT_CORRECT = "-----BEGIN CERTIFICATE-----\n"
+ + "MIIDWzCCAxmgAwIBAgICAiswCgYIKoZIzj0EAwIwHTEbMBkGA1UEChMSQ2VydGlm\n"
+ + "aWNhdGUgSXNzdWVyMCIYDzE5NzAwMTEyMTM0NjQwWhgPMTk3MDAxMjQwMzMzMjBa\n"
+ + "MB8xHTAbBgNVBAoTFFN1YmplY3QgT3JnYW5pemF0aW9uMFkwEwYHKoZIzj0CAQYI\n"
+ + "KoZIzj0DAQcDQgAE5itp4r9ln5e+Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aX\n"
+ + "qAoY+cPEox5W4nyDSNsWGhz1HX7xlC1Lz3IiwYECAKqCAgBVo4ICOTCCAjUwDwYD\n"
+ + "VR0PAQH/BAUDAwGqgDASBgNVHRMBAf8ECDAGAQH/AgEFMBQGA1UdIAEB/wQKMAgw\n"
+ + "BgYEVR0gADBpBgNVHREBAf8EXzBdgQxyZmNAODIyLk5hbWWCB2ROU05hbWWkGTAX\n"
+ + "MRUwEwYDVQQKEwxPcmdhbml6YXRpb26GGmh0dHA6Ly91bmlmb3JtLlJlc291cmNl\n"
+ + "LklkhwT///8AiAcqA6Jcg7IDMAwGA1UdHgEB/wQCMAAwDAYDVR0kAQH/BAIwADCB\n"
+ + "mQYDVR0lAQH/BIGOMIGLBgRVHSUABggrBgEFBQcDAQYIKwYBBQUHAwEGCCsGAQUF\n"
+ + "BwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYB\n"
+ + "BQUHAwcGCCsGAQUFBwMIBggrBgEFBQcDCQYIKwYBBQUIAgIGCisGAQQBgjcKAwMG\n"
+ + "CWCGSAGG+EIEATANBgNVHTYBAf8EAwIBATAOBgQqTYYJAQH/BAMBAQEwZgYDVR0S\n"
+ + "BF8wXYEMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBkwFzEVMBMGA1UEChMMT3JnYW5p\n"
+ + "emF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvdXJjZS5JZIcE////AIgHKgOiXIOy\n"
+ + "AzAJBgNVHR8EAjAAMAwGA1UdIwQFMAOAAQEwCgYDVR0OBAMEAQEwKQYDVR0hBCIw\n"
+ + "IDAeBg0qhkiG9xIEAYS3CQIBBg0qhkiG9xIEAYS3CQICMAoGCCqGSM49BAMCAzAA\n"
+ + "MC0CFAC+EL6GszVj+464/OPxmZYZtPQ7AhUAgShighm6z+uFbVLeCT5i41tVcUA=\n"
+ + "-----END CERTIFICATE-----\n";
private static String CERT_TAMPERED = "-----BEGIN CERTIFICATE-----\n"
- + "MIIC+jCCAragAwIBAgICAiswDAYHKoZIzjgEAwEBADAdMRswGQYDVQQKExJDZXJ0a"
- + "WZpY2F0ZSBJc3N1ZXIwIhgPMTk3MDAxMTIxMzQ2NDBaGA8xOTcwMDEyNDAzMzMyMF"
- + "owHzEdMBsGA1UEChMUU3ViamVjdCBPcmdhbml6YXRpb24wGTAMBgcqhkjOOAQDAQE"
- + "AAwkAAQIDBAUGBwiBAgCqggIAVaOCAhQwggIQMA8GA1UdDwEB/wQFAwMBqoAwEgYD"
- + "VR0TAQH/BAgwBgEB/wIBBTAUBgNVHSABAf8ECjAIMAyGBFUdIAAwZwYDVR0RAQH/B"
- + "F0wW4EMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBcxFTATBgNVBAoTDE9yZ2FuaXphdG"
- + "lvboYaaHR0cDovL3VuaWZvcm0uUmVzb3VyY2UuSWSHBP///wCIByoDolyDsgMwDAY"
- + "DVR0eAQH/BAIwADAMBgNVHSQBAf8EAjAAMIGZBgNVHSUBAf8EgY4wgYsGBFUdJQAG"
- + "CCsGAQUFBwMBBggrBgEFBQcDAQYIKxYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDB"
- + "AYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUFBw"
- + "MJBggrBgEFBQgCAgYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GA1UdNgEB/wQDAgE"
- + "BMA4GBCpNhgkBAf8EAwEBATBkBgNVHRIEXTBbgQxyZmNAODIyLk5hbWWCB2ROU05h"
- + "bWWkFzEVMBMGA1UEChMMT3JnYW5pemF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvd"
- + "XJjZS5JZIcE////AIgHKgOiXIOyAzAJBgNVHR8EAjAAMAoGA1UdIwQDAQEBMAoGA1"
- + "UdDgQDAQEBMAoGA1UdIQQDAQEBMAwHByqGSM44BAMBAQADMAAwLQIUAL4QvoazNWP"
- + "7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n"
- + "-----END CERTIFICATE-----";
+ + "MIIDWjCCAxmgAwIBAgICAiswCgYIKoZIzj0EAwIwHTEbMBkGA1UEChMSQ2VydGlm\n"
+ + "aWNhdGUgSXNzdWVyMCIYDzE5NzAwMTEyMTM0NjQwWhgPMTk3MDAxMjQwMzMzMjBa\n"
+ + "MB8xHTAbBgNVBAoTFFN1YmplY3QgT3JnYW5pemF0aW9uMFkwEwYHKoZIzj0CAQYI\n"
+ + "KoZIzj0DAQcDQgAE5itp4r9ln5e+Lx4NlIpM1Zdrt6keDUb73ampHp3culoB59aX\n"
+ + "qAoY+cPEox5W4nyDSNsWGhz1HX7xlC1Lz3IiwYECAKqCAgBVo4ICOTCCAjUwDwYD\n"
+ + "VR0PAQH/BAUDAwGqgDASBgNVHRMBAf8ECDAGAQH/AgEFMBQGA1UdIAEB/wQKMAgw\n"
+ + "DIYEVR0gADBpBgNVHREBAf8EXzBdgQxyZmNAODIyLk5hbWWCB2ROU05hbWWkGTAX\n"
+ + "MRUwEwYDVQQKEwxPcmdhbml6YXRpb26GGmh0dHA6Ly91bmlmb3JtLlJlc291cmNl\n"
+ + "LklkhwT///8AiAcqA6Jcg7IDMAwGA1UdHgEB/wQCMAAwDAYDVR0kAQH/BAIwADCB\n"
+ + "mQYDVR0lAQH/BIGOMIGLBgRVHSUABggrBgEFBQcDAQYIKwYBBQUHAwEGCCsWAQUF\n"
+ + "BwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYB\n"
+ + "BQUHAwcGCCsGAQUFBwMIBggrBgEFBQcDCQYIKwYBBQUIAgIGCisGAQQBgjcKAwMG\n"
+ + "CWCGSAGG+EIEATANBgNVHTYBAf8EAwIBATAOBgQqTYYJAQH/BAMBAQEwZgYDVR0S\n"
+ + "BF8wXYEMcmZjQDgyMi5OYW1lggdkTlNOYW1lpBkwFzEVMBMGA1UEChMMT3JnYW5p\n"
+ + "emF0aW9uhhpodHRwOi8vdW5pZm9ybS5SZXNvdXJjZS5JZIcE////AIgHKgOiXIOy\n"
+ + "AzAJBgNVHR8EAjAAMAwGA1UdIwQFMAOAAQEwCgYDVR0OBAMEAQEwKQYDVR0hBCIw\n"
+ + "IDAeBg0qhkiG9xIEAYS3CQIBBg0qhkiG9xIEAYS3CQICMAkHByqGSM44BAMDMAAw\n"
+ + "LQIUAL4QvoazNWP7jrj84/GZlhm09DsCFQCBKGKCGbrP64VtUt4JPmLjW1VxQA==\n"
+ + "-----END CERTIFICATE-----\n";
// Base64 encoded form of ASN.1 DER encoded X.509 CRL
// (see RFC 3280 at http://www.ietf.org/rfc/rfc3280.txt)
diff --git a/mmodules/core_platform_api/api/legacy_platform/current.txt b/mmodules/core_platform_api/api/legacy_platform/current.txt
index 2cc4573..d9e25ee 100644
--- a/mmodules/core_platform_api/api/legacy_platform/current.txt
+++ b/mmodules/core_platform_api/api/legacy_platform/current.txt
@@ -495,17 +495,6 @@
}
-package dalvik.annotation.compat {
-
- public class VersionCodes {
- field public static final int O = 26; // 0x1a
- field public static final int P = 28; // 0x1c
- field public static final int Q = 29; // 0x1d
- field public static final int R = 30; // 0x1e
- }
-
-}
-
package dalvik.annotation.optimization {
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface CriticalNative {
@@ -524,6 +513,10 @@
method public StackTraceElement getStackTraceElement();
}
+ public class AppSpecializationHooks {
+ method public static void handleCompatChangesBeforeBindingApplication();
+ }
+
public class BaseDexClassLoader extends java.lang.ClassLoader {
method public void addDexPath(String);
method public void addNativePath(java.util.Collection<java.lang.String>);
diff --git a/mmodules/intracoreapi/api/intra/current.txt b/mmodules/intracoreapi/api/intra/current.txt
index f05b08a..e7292be 100644
--- a/mmodules/intracoreapi/api/intra/current.txt
+++ b/mmodules/intracoreapi/api/intra/current.txt
@@ -29,11 +29,12 @@
package dalvik.annotation.compat {
- @libcore.api.CorePlatformApi @libcore.api.IntraCoreApi public class VersionCodes {
- field @libcore.api.CorePlatformApi @libcore.api.IntraCoreApi public static final int O = 26; // 0x1a
- field @libcore.api.CorePlatformApi @libcore.api.IntraCoreApi public static final int P = 28; // 0x1c
- field @libcore.api.CorePlatformApi @libcore.api.IntraCoreApi public static final int Q = 29; // 0x1d
- field @libcore.api.CorePlatformApi @libcore.api.IntraCoreApi public static final int R = 30; // 0x1e
+ @libcore.api.IntraCoreApi public class VersionCodes {
+ field @libcore.api.IntraCoreApi public static final int CUR_DEVELOPMENT = 10000; // 0x2710
+ field @libcore.api.IntraCoreApi public static final int O = 26; // 0x1a
+ field @libcore.api.IntraCoreApi public static final int P = 28; // 0x1c
+ field @libcore.api.IntraCoreApi public static final int Q = 29; // 0x1d
+ field @libcore.api.IntraCoreApi public static final int R = 30; // 0x1e
}
}
diff --git a/non_openjdk_java_files.bp b/non_openjdk_java_files.bp
index 8f2e2cf..35a0ac4 100644
--- a/non_openjdk_java_files.bp
+++ b/non_openjdk_java_files.bp
@@ -32,6 +32,7 @@
"dalvik/src/main/java/dalvik/bytecode/OpcodeInfo.java",
"dalvik/src/main/java/dalvik/bytecode/Opcodes.java",
"dalvik/src/main/java/dalvik/system/AllocationLimitError.java",
+ "dalvik/src/main/java/dalvik/system/AppSpecializationHooks.java",
"dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java",
"dalvik/src/main/java/dalvik/system/BlockGuard.java",
"dalvik/src/main/java/dalvik/system/CloseGuard.java",
diff --git a/ojluni/annotations/hiddenapi/java/lang/Thread.java b/ojluni/annotations/hiddenapi/java/lang/Thread.java
index d301f96..235743c 100644
--- a/ojluni/annotations/hiddenapi/java/lang/Thread.java
+++ b/ojluni/annotations/hiddenapi/java/lang/Thread.java
@@ -55,7 +55,7 @@
throw new RuntimeException("Stub!");
}
- @UnsupportedAppUsage(trackingBug = 172313193)
+ @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
Thread(java.lang.ThreadGroup group, java.lang.String name, int priority, boolean daemon) {
throw new RuntimeException("Stub!");
}
diff --git a/ojluni/src/main/java/java/lang/System.java b/ojluni/src/main/java/java/lang/System.java
index e7cb6ee..4abba4d 100644
--- a/ojluni/src/main/java/java/lang/System.java
+++ b/ojluni/src/main/java/java/lang/System.java
@@ -25,8 +25,6 @@
*/
package java.lang;
-import com.android.i18n.timezone.TimeZoneDataFiles;
-import com.android.icu.util.Icu4cMetadata;
import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
import android.system.ErrnoException;
@@ -38,6 +36,7 @@
import java.util.Locale;
import java.util.Properties;
import java.util.PropertyPermission;
+import libcore.icu.ICU;
import libcore.io.Libcore;
import sun.reflect.CallerSensitive;
@@ -997,16 +996,9 @@
p.put("os.version", info.release);
// Android-added: Undocumented properties that exist only on Android.
- p.put("android.icu.library.version", Icu4cMetadata.getIcuVersion());
- p.put("android.icu.unicode.version", Icu4cMetadata.getUnicodeVersion());
- p.put("android.icu.cldr.version", Icu4cMetadata.getCldrVersion());
-
- // Property override for ICU4J : this is the location of the ICU4C data. This
- // is prioritized over the properties in ICUConfig.properties. The issue with using
- // that is that it doesn't play well with jarjar and it needs complicated build rules
- // to change its default value.
- String icuDataPath = TimeZoneDataFiles.generateIcuDataPath();
- p.put("android.icu.impl.ICUBinary.dataPath", icuDataPath);
+ p.put("android.icu.library.version", ICU.getIcuVersion());
+ p.put("android.icu.unicode.version", ICU.getUnicodeVersion());
+ p.put("android.icu.cldr.version", ICU.getCldrVersion());
parsePropertyAssignments(p, specialProperties());