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!

Другие вопросы по тегам