2013-06-11 58 views
2

我在Android上使用joda-time的LocalDates。當我使用Proguard縮小應用程序時,當我比較LocalDates時(即使用LocalDate.equals()),我看到NullPointerException。在Android上使用null字段的Joda年表(使用Proguard)

我做了一些戳動,看起來問題歸結爲具有空字段的LocalDate的年表,例如ISOChronology.year()返回null。當與Proguard的收縮的碼,該位觸發一個RuntimeException(但使用是非模糊代碼時不):

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

中使用的年表實例是純ISOChronology [UTC]實例。

我想我錯過了我的Proguard配置中的一些魔法咒語,但我不明白joda足夠好了解它。我不想把所有的喬達都標記爲「保持」。有任何想法嗎?

回答

0

ProGuard在代碼中打印兩個Class.forName實例的註釋。如果調用Class.forName類名是從外部文件讀取,您需要保留相應的實現:

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

如果修復您的例外,我沒有檢查。

+0

感謝您的回覆,但我仍然得到與此相同的例外。 –