我在Android上使用joda-time的LocalDates。当我用Proguard缩小我的应用程序时,我在比较LocalDates时会看到NullPointerException(即使用LocalDate.equals())。
我做了一些探讨,看起来问题归结为具有空字段的LocalDate的年表,例如,ISOChronology.year()返回null。当使用Proguard缩小时,这段代码会触发RuntimeException(但在使用未经混淆的代码时则不会):
if (marketDay != null && marketDay.getChronology().year() == null) {
throw new RuntimeException("fail " + marketDay.getChronology());
}
使用的年表实例是普通的ISOChronology [UTC]实例。
我认为我错过了我的Proguard配置中的一些神奇的咒语,但我不太了解joda以便弄明白。我宁愿不把所有的joda都标记为“保持”。有什么想法吗?
答案 0 :(得分:0)
ProGuard在代码中打印出两个Class.forName实例的注释。如果从外部文件中读取Class.forName的类名,则需要保留相应的实现:
-keep class * implements org.joda.time.tz.Provider
-keep class * implements org.joda.time.tz.NameProvider
我没有检查这是否可以修复您的异常。