Android: Дешугаризация ZonedDateTime приводит к тому, что TimeOffset имеет значение null
Я пытаюсь перейти с ThreeTen Android Backport на java.time с дешугарингом . В сборках отладки это работает отлично, но в сборках выпуска () я получаю странную ошибку во время выполнения.
После сериализации ZonedDateTime (передача Bundle в Intent) ZonedDateTime не имеет TimeOffset:
до:2022-06-07T02:00+02:00
после:2022-06-07T02:00null
Я использую gradle версии 7.2.1 (AGP 7.3.3) в сочетании с базовой резервной копией из перечисленных выше документов Android. (изменение на java 11 не решает проблему)
android {
...
compileOptions {
// Flag to enable support for the new language APIs (java.time)
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
...
}
dependencies {
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5"
}
Я пропустил какую-либо конфигурацию (например, в правилах proguard)? Как я могу решить эту проблему?
ОБНОВЛЕНИЕ 1: 09.06.2022 Вот минимальный воспроизводимый пример проблемы. Имейте в виду, что это происходит только сminifyEnabled = true
val zonedDateTime = ZonedDateTime.parse("2022-06-07T02:00:00.000+02:00", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSVV"))
// zonedDateTime.toString() == "2022-06-07T02:00+02:00"
val bundle = Bundle()
bundle.putSerializable("date", zonedDateTime)
bundle.getSerializable("date") // .toString() == "2022-06-07T02:00null"
1 ответ
Общая проблема заключалась в том, что desugar_jdk_libs «не поддерживал сериализацию с сериализатором java по умолчанию в библиотеке desugared, кроме коллекций» .
Эта проблема решена в версии 1.1.6 библиотеки:
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.6"
Теперь все работает, как и ожидалось, когда включено minify!