2

我在 Android 上使用 joda-time 的 LocalDates。当我使用 Proguard 缩小我的应用程序时,我在比较 LocalDates(即,使用 LocalDate.equals())时看到 NullPointerException。

我做了一些探索,看起来问题归结为具有空字段的 LocalDate 的年表,例如,ISOChronology.year() 返回 null。这段代码在使用 Proguard 收缩时会触发 RuntimeException(但在使用未混淆代码时不会):

if (marketDay != null && marketDay.getChronology().year() == null) {
  throw new RuntimeException("fail " + marketDay.getChronology());
}

正在使用的 Chronology 实例是普通的 ISOChronology[UTC] 实例。

我假设我的 Proguard 配置中遗漏了一些神奇的咒语,但我对 joda 的理解不够好,无法弄清楚。我不想将所有的 joda 都标记为“保留”。有任何想法吗?

4

1 回答 1

0

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

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

我还没有检查这是否解决了您的异常。

于 2013-06-20T01:28:45.810 回答