首页 > 解决方案 > 仅在发布版本中获取 com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter 的 IllegalAccessError

问题描述

此崩溃仅在发布版本中发生,在调试版本中工作正常。当注入所有依赖项时,它会在应用程序启动时发生。

 @JvmStatic
 @Provides
 internal fun provideJackson() = ObjectMapper()
           .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
            .registerModule(JodaModule())
            .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)

我正在使用 jacksonVersion 2.9.5

// Jackson
'jacksonCore'         : "com.fasterxml.jackson.core:jackson-core:${versions.jacksonVersion}",
'jacksonAnnotations'  : "com.fasterxml.jackson.core:jackson-annotations:${versions.jacksonVersion}",
'jacksonDatabind'     : "com.fasterxml.jackson.core:jackson-databind:${versions.jacksonVersion}",
'jacksonDataTypeJoda' : "com.fasterxml.jackson.datatype:jackson-datatype-joda:${versions.jacksonVersion}",

我尝试将 jackson 更新到 2.9.9,但没有奏效。

这是我遇到的崩溃

java.lang.IllegalAccessError: tried to access class l.c.a.e.n$c[] from class com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter
        at com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter.b(FilteredBeanPropertyWriter.java:34)
        at com.fasterxml.jackson.datatype.joda.cfg.FormatConfig.<clinit>(FormatConfig.java:22)
        at com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer.forType(DateTimeDeserializer.java:1)
        at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:2)
        at c.f.d.a.d.e.a(CatcherModule.kt:4)

去混淆的堆栈跟踪看起来像这样

java.lang.IllegalAccessError: tried to access class l.c.a.e.n$c[] from class com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter
        at com.fasterxml.jackson.databind.ser.impl.FilteredBeanPropertyWriter.org.joda.time.format.PeriodFormatterBuilder.toFormatter(FilteredBeanPropertyWriter.java:34)
                                                                              org.joda.time.format.ISOPeriodFormat.standard
        at com.fasterxml.jackson.datatype.joda.cfg.FormatConfig.<clinit>(FormatConfig.java:22)
        at com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer.forType(DateTimeDeserializer.java:1)
        at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:2)

标签: androidjodatimejackson-databind

解决方案


-keepclassmembers class org.joda.time.format.** { *; }解决了我的问题


推荐阅读