如何阻止 proguard 在 Android 上删除 joda 时间资源



我在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.

最新更新