Proguard и RxAndroid V1.1.0

Кажется, я не могу заставить Proguard работать с библиотекой RxAndroid v1.1.0.

Раньше я использовал версию 1.0.1, и она отлично работала со следующим правилом.

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

Однако после обновления rxAndroid до версии 1.1.0, а также включения RxJava, как указано в Github ReadMe.txt, я получаю это исключение всякий раз, когда использую 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.**

Это не работает, и я постоянно получаю сбои при создании сборок выпуска. Любая идея, как я хотел бы использовать последние библиотеки.


person StuStirling    schedule 16.12.2015    source источник
comment
См. обновленный набор правил Артема: github.com/artem-zinnatullin/RxJavaProGuardRules   -  person akarnokd    schedule 16.12.2015


Ответы (2)


Я добавляю следующий код в файл proguard.

-keepclassmembers class rx.internal.util.unsafe.** {
    long producerIndex;
    long consumerIndex;
}
person 0Kai    schedule 28.04.2016

Вы должны попробовать с

 -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;
    }
person IntelliJ Amiya    schedule 12.01.2018