android - 仅在发布版本中获取 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)
解决方案
-keepclassmembers class org.joda.time.format.** { *; }
解决了我的问题
推荐阅读
- python - 自建flask_restful api使用请求模块发布时返回NULL
- rundeck - Rundeck 3.2.8 - 显示所有正在运行的执行
- spring-boot - 具有预先存在或生成的 DTO 的 spring-data 存储库
- python - 在 Python 应用程序之间共享高频数据有哪些不同的方法?
- events - Google 日历不再显示 PUBLIC 日历上的活动
- linux - Bash root crontab 脚本挂起并且不再运行
- python - 在熊猫中从浮点数转换为字符串时如何具有相同的小数位数?
- java - 从 Tomcat 7 到 8.5 的错误将上下文破坏事件发送到类的侦听器实例的异常
- xml - 有没有办法表明一个节点在 XML 文件中已被弃用?
- r - 在终端中使用 rvest::read_html 的浏览器不受支持