在Android上使用空字段的Joda年表(使用Proguard)

时间:2013-06-11 18:37:35

标签: android proguard jodatime

我在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都标记为“保持”。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

ProGuard在代码中打印出两个Class.forName实例的注释。如果从外部文件中读取Class.forName的类名,则需要保留相应的实现:

-keep class * implements org.joda.time.tz.Provider
-keep class * implements org.joda.time.tz.NameProvider

我没有检查这是否可以修复您的异常。