【问题标题】:Unable to create release-build with RxJava as dependency and proguard-rules无法使用 RxJava 作为依赖项和 proguard-rules 创建发布版本
【发布时间】:2017-09-21 18:48:55
【问题描述】:

我在依赖项中使用'compile 'io.reactivex:rxjava:1.3.1'

我已启用minifyEnabled true 来混淆代码。

但是我遇到了错误-

Warning:rx.internal.schedulers.NewThreadWorker: can't find referenced method 'java.util.concurrent.ConcurrentHashMap$KeySetView keySet()' in library class java.util.concurrent.ConcurrentHashMap

我已经为 rxjava 添加了如下的 proguard 规则-

-keep class rx.schedulers.Schedulers {
    public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
    public <methods>;
}
-keep class rx.schedulers.TestScheduler {
    public <methods>;
}
-keep class rx.schedulers.Schedulers {
    public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    long producerNode;
    long consumerNode;
}

-keepclassmembers class rx.internal.util.unsafe.** {
    long producerIndex;
    long consumerIndex;
}

我也尝试过compile 'com.artemzin.rxjava:proguard-rules:1.3.1.0',但我仍然在顶部提到相同的问题。

【问题讨论】:

    标签: android android-proguard


    【解决方案1】:

    这是 1.3.1 中的一个错误,在 1.3.2 版本中由 PR 修复。

    【讨论】:

    • 感谢您的回答。我已经选择了 Lukas Novak 的回答,将来我会更改为 PR 1.3.2。
    【解决方案2】:

    不知道是什么ProGuard规则解决了这个问题,但是如果没有必要使用1.3.1,你现在可以使用旧版本的1.3.0。版本 1.3.1 仅包含微小的更改,而带有这些 ProGuard 规则的 1.3.0 可以正常工作。

    【讨论】:

      【解决方案3】:

      尝试在您的 proguard 文件中添加此规则

      -dontwarn java.util.concurrent.**
      

      【讨论】:

      • 我会尝试并告诉你。
      猜你喜欢
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多