Proguard和RxAndroid V1.1.0

时间:2015-12-16 15:04:45

标签: android rx-java rx-android

我似乎无法让Proguard使用RxAndroid v1.1.0库。

以前我一直在使用v1.0.1,这可以正常使用以下规则。

-dontwarn rx.internal.util.unsafe.**

然而,升级到rxAndroid的v1.1.0并且还包括在Github ReadMe.txt上说的RxJava之后,每当我在代码中使用RxAndroid时,我都会遇到此异常。

Caused by: java.lang.NoSuchFieldException: producerIndex

所以我添加了更多Proguard规则,就像人们在Github的一些问题报告中所说的那样。

-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.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}

-dontwarn rx.internal.util.unsafe.**

这不起作用,我在生成发布版本时不断遇到崩溃。任何想法,因为我想使用最新的库。

2 个答案:

答案 0 :(得分:9)

我在proguard文件中添加以下代码。

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

答案 1 :(得分:1)

你应该试试

 -keep class * {
        public private *;
    }
     # rxjava
    -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;
    }