提问人:goemic 提问时间:6/8/2022 最后编辑:goemic 更新时间:6/29/2022 访问量:457
android:对 ZonedDateTime 进行脱糖会导致 TimeOffset 为 null
android: Desugaring of ZonedDateTime results in TimeOffset being null
问:
我正在尝试通过脱糖从 ThreeTen Android Backport 迁移到 java.time。在调试版本上,这可以完美地工作,但是在发布版本()上,我在运行时遇到一个奇怪的错误。minifyEnabled = true
序列化 ZonedDateTime 后(在 Intent 中传递 Bundle),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-rules 中)?如何解决此问题?
更新 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赞
goemic
6/29/2022
#1
一般问题是desugar_jdk_libs“除了集合之外,不支持在脱糖库中使用默认的 java 序列化程序进行序列化”。
此问题已在库的 1.1.6 版中得到解决:
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.6"
现在,当启用缩小时,一切都按预期唤醒!
评论
ZonedDateTime