【问题标题】:How to stop proguard from removing joda time resources on Android如何阻止proguard在Android上删除joda时间资源
【发布时间】:2019-03-27 16:38:41
【问题描述】:

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

但是,它们还不够,因为文件仍然消失了。

【问题讨论】:

  • -dontwarn org.joda.convert.** -dontwarn org.joda.time.** -keep class org.joda.time.** { *; } -keep interface org.joda.time.** { *; }
  • 嗯...它有帮助。但为什么?我认为 ** 应该包括所有嵌套包(即 org.joda.** 比 org.joda.time.** 宽)。
  • 是的@IntelliJAmiya
  • 如果您解决了,请作为答案发布。
  • 我刚刚申请了你建议的选项。我也清理了项目并重建了它。我不知道有什么帮助。

标签: android proguard jodatime


【解决方案1】:

java.util.MissingResourceException: 找不到资源包 java.util.PropertyResourceBundle,键 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2021-09-05
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多