Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

App Crashes when using a lib which uses RxJava on release only

I have used this library in my app the library itself uses RxJava and it works perfectly in Debug APK. It works even on Release when Proguard obfuscation is disabled. But it stops working when I enable Proguard once I select an Image!

Here is the log:

08-02 22:54:11.848: E/AndroidRuntime(17818): FATAL EXCEPTION: main 08-02 22:54:11.848: E/AndroidRuntime(17818): Process: com.domus.safariar.domus, PID: 17818 08-02 22:54:11.848: E/AndroidRuntime(17818): java.lang.InternalError 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.util.unsafe.UnsafeAccess.addressOf(Unknown Source:14) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.util.unsafe.SpscArrayQueueProducerFields.(Unknown Source:4) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.(Unknown Source:50) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.operators.OperatorObserveOn.call(Unknown Source:22) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.operators.OperatorObserveOn.call(Unknown Source:2) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.Observable$2.call(Unknown Source:8) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.Observable$2.call(Unknown Source:2) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.Observable.subscribe(Unknown Source:43) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.Observable.subscribe(Unknown Source:0) 08-02 22:54:11.848: E/AndroidRuntime(17818): at com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages(Unknown Source:36) 08-02 22:54:11.848: E/AndroidRuntime(17818): at com.zfdang.multiple_images_selector.ImagesSelectorActivity.onRequestPermissionsResult(Unknown Source:48) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7429) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.Activity.dispatchActivityResult(Activity.java:7280) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.ActivityThread.deliverResults(ActivityThread.java:4264) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.ActivityThread.handleSendResult(ActivityThread.java:4312) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.ActivityThread.-wrap19(Unknown Source:0) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.os.Handler.dispatchMessage(Handler.java:106) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.os.Looper.loop(Looper.java:164) 08-02 22:54:11.848: E/AndroidRuntime(17818): at android.app.ActivityThread.main(ActivityThread.java:6494) 08-02 22:54:11.848: E/AndroidRuntime(17818): at java.lang.reflect.Method.invoke(Native Method) 08-02 22:54:11.848: E/AndroidRuntime(17818): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 08-02 22:54:11.848: E/AndroidRuntime(17818): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 08-02 22:54:11.848: E/AndroidRuntime(17818): Caused by: java.lang.NoSuchFieldException: No field producerIndex in class Lrx/internal/util/unsafe/SpscArrayQueueProducerFields; (declaration of 'rx.internal.util.unsafe.SpscArrayQueueProducerFields' appears in /data/app/com.domus.safariar.domus-P04AN9pLul9iY1dryJ3vXg==/base.apk!classes3.dex) 08-02 22:54:11.848: E/AndroidRuntime(17818): at java.lang.Class.getDeclaredField(Native Method) 08-02 22:54:11.848: E/AndroidRuntime(17818): at rx.internal.util.unsafe.UnsafeAccess.addressOf(Unknown Source:0) 08-02 22:54:11.848: E/AndroidRuntime(17818): ... 22 more 08-02 22:54:11.849: E/UncaughtException(17818): java.lang.InternalError 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.util.unsafe.UnsafeAccess.addressOf(Unknown Source:14) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.util.unsafe.SpscArrayQueueProducerFields.(Unknown Source:4) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.(Unknown Source:50) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.operators.OperatorObserveOn.call(Unknown Source:22) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.operators.OperatorObserveOn.call(Unknown Source:2) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.Observable$2.call(Unknown Source:8) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.Observable$2.call(Unknown Source:2) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.Observable.subscribe(Unknown Source:43) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.Observable.subscribe(Unknown Source:0) 08-02 22:54:11.849: E/UncaughtException(17818): at com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages(Unknown Source:36) 08-02 22:54:11.849: E/UncaughtException(17818): at com.zfdang.multiple_images_selector.ImagesSelectorActivity.onRequestPermissionsResult(Unknown Source:48) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7429) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.Activity.dispatchActivityResult(Activity.java:7280) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.ActivityThread.deliverResults(ActivityThread.java:4264) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.ActivityThread.handleSendResult(ActivityThread.java:4312) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.ActivityThread.-wrap19(Unknown Source:0) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644) 08-02 22:54:11.849: E/UncaughtException(17818): at android.os.Handler.dispatchMessage(Handler.java:106) 08-02 22:54:11.849: E/UncaughtException(17818): at android.os.Looper.loop(Looper.java:164) 08-02 22:54:11.849: E/UncaughtException(17818): at android.app.ActivityThread.main(ActivityThread.java:6494) 08-02 22:54:11.849: E/UncaughtException(17818): at java.lang.reflect.Method.invoke(Native Method) 08-02 22:54:11.849: E/UncaughtException(17818): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 08-02 22:54:11.849: E/UncaughtException(17818): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 08-02 22:54:11.849: E/UncaughtException(17818): Caused by: java.lang.NoSuchFieldException: No field producerIndex in class Lrx/internal/util/unsafe/SpscArrayQueueProducerFields; (declaration of 'rx.internal.util.unsafe.SpscArrayQueueProducerFields' appears in /data/app/com.domus.safariar.domus-P04AN9pLul9iY1dryJ3vXg==/base.apk!classes3.dex) 08-02 22:54:11.849: E/UncaughtException(17818): at java.lang.Class.getDeclaredField(Native Method) 08-02 22:54:11.849: E/UncaughtException(17818): at rx.internal.util.unsafe.UnsafeAccess.addressOf(Unknown Source:0) 08-02 22:54:11.849: E/UncaughtException(17818): ... 22 more

I have tried to add some Proguard rules to avoid crashing but it does not work:

-keep class * {
    public private *;
}

-keep class com.facebook.** { *; }

-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;
}
    -keep class com.zfdang.multiple_images_selector.ImagesSelectorActivity**{*;}
    -keep class com.zfdang.multiple_images_selector.ImagesSelectorActivity$**{*;}
    -dontwarn com.zfdang.multiple_images_selector.ImagesSelectorActivity**{*;}
    -keep com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages**{*;}
    -dontwarn com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages**{*;}
    -keep class rx.internal.operators.OperatorObserveOn**{*;}
    -dontwarn rx.internal.operators.OperatorObserveOn.**
like image 548
Amin Memariani Avatar asked Oct 19 '25 14:10

Amin Memariani


1 Answers

-dontwarn sun.misc.** 

-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
 long producerIndex; 
long consumerIndex; 
} 
-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; 
} 
-dontnote rx.internal.util.PlatformDependent 

Please try to add missing lines to your proguard rule.

like image 192
Sudhi Avatar answered Oct 22 '25 05:10

Sudhi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!