我在Android应用程序中使用ProGuard和Joda Time(当然,我使用的是针对Android优化的版本:https://github.com/dlew/joda-time-android(。我遇到了一个问题,即打开优化和混淆后,尝试使用PeriodFormat
时出现错误:
java.util.MissingResourceException: can't find resource for bundle java.util.PropertyResourceBundle, key PeriodFormat.space
我比较了使用和不使用 proguard 构建时 APK 的内容,发现非优化版本中的 org/joda/time/format 目录包含 15 个属性文件,优化版本中只有 9 个。在这些文件中,我看到了 PeriodFormat.space 键,因此毫无疑问,这些文件丢失引起的异常。
如何配置 proguard,以便在没有任何优化的情况下将此目录的内容传输到优化的 APK?
我已经对Joda Time使用了以下规则:
-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.** { *; }
-keep interface org.joda.** { *; }
-keepdirectories org.joda.**
但是,它们还不够,因为文件仍然消失。
java.util.MissingResourceException: 找不到捆绑包的资源 java.util.PropertyResourceBundle, key PeriodFormat.space
不要
-keep class org.joda.** { *; }
-keep interface org.joda.** { *; }
做
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *; }
您的proguard
将是
-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *; }
阅读-keep options
.