使用仅在发行版上使用RxJava的库时,App崩溃

时间:2018-08-02 18:35:48

标签: android rx-java proguard android-proguard

我在我的应用程序中使用了this库,该库本身使用RxJava,并且可以在Debug APK中完美运行。禁用Proguard混淆后,它甚至可以在Release上使用。但是,一旦选择映像,启用Proguard后,它将停止工作!

这是日志:

  

08-02 22:54:11.848:E / AndroidRuntime(17818):致命异常:主   08-02 22:54:11.848:E / AndroidRuntime(17818):进程:   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):位于   rx.internal.util.unsafe.UnsafeAccess.addressOf(未知来源:14)   08-02 22:54:11.848:E / AndroidRuntime(17818):at   rx.internal.util.unsafe.SpscArrayQueueProducerFields。(未知   来源:4)08-02 22:54:11.848:E / AndroidRuntime(17818):在   rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber。(未知   来源:50)08-02 22:54:11.848:E / AndroidRuntime(17818):在   rx.internal.operators.OperatorObserveOn.call(未知来源:22)08-02   22:54:11.848:E / AndroidRuntime(17818):在   rx.internal.operators.OperatorObserveOn.call(未知来源:2)08-02   22:54:11.848:E / AndroidRuntime(17818):在   rx.Observable $ 2.call(未知来源:8)08-02 22:54:11.848:   E / AndroidRuntime(17818):at rx.Observable $ 2.call(未知源:2)   08-02 22:54:11.848:E / AndroidRuntime(17818):at   rx.Observable.subscribe(未知来源:43)08-02 22:54:11.848:   E / AndroidRuntime(17818):位于rx.Observable.subscribe(未知来源:0)   08-02 22:54:11.848:E / AndroidRuntime(17818):at   com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages(未知   来源:36)08-02 22:54:11.848:E / AndroidRuntime(17818):在   com.zfdang.multiple_images_selector.ImagesSelectorActivity.onRequestPermissionsResult(未知   来源:48)08-02 22:54:11.848:E / AndroidRuntime(17818):位于   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):在   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(未知来源:0)08-02   22:54:11.848:E / AndroidRuntime(17818):在   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):在   android.os.Looper.loop(Looper.java:164)08-02 22:54:11.848:   E / AndroidRuntime(17818):位于   android.app.ActivityThread.main(ActivityThread.java:6494)08-02   22:54:11.848:E / AndroidRuntime(17818):在   java.lang.reflect.Method.invoke(本机方法)08-02 22:54:11.848:   E / AndroidRuntime(17818):位于   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):原因:   java.lang.NoSuchFieldException:类中没有字段producerIndex   Lrx / internal / util / unsafe / SpscArrayQueueProducerFields; (声明   “ rx.internal.util.unsafe.SpscArrayQueueProducerFields”出现在   /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(本机方法)08-02 22:54:11.848:   E / AndroidRuntime(17818):位于   rx.internal.util.unsafe.UnsafeAccess.addressOf(未知来源:0)08-02   22:54:11.848:E / AndroidRuntime(17818):... 22更多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(未知来源:14)   08-02 22:54:11.849:E / UncaughtException(17818):at   rx.internal.util.unsafe.SpscArrayQueueProducerFields。(未知   来源:4)08-02 22:54:11.849:E / UncaughtException(17818):at   rx.internal.operators.OperatorObserveOn $ ObserveOnSubscriber。(未知   来源:50)08-02 22:54:11.849:E / UncaughtException(17818):在   rx.internal.operators.OperatorObserveOn.call(未知来源:22)08-02   22:54:11.849:E / UncaughtException(17818):在   rx.internal.operators.OperatorObserveOn.call(未知来源:2)08-02   22:54:11.849:E / UncaughtException(17818):在   rx.Observable $ 2.call(未知来源:8)08-02 22:54:11.849:   E / UncaughtException(17818):at rx.Observable $ 2.call(未知来源:2)   08-02 22:54:11.849:E / UncaughtException(17818):at   rx.Observable.subscribe(未知来源:43)08-02 22:54:11.849:   E / UncaughtException(17818):at rx.Observable.subscribe(Unknown   来源:0)08-02 22:54:11.849:E / UncaughtException(17818):at   com.zfdang.multiple_images_selector.ImagesSelectorActivity.LoadFolderAndImages(未知   来源:36)08-02 22:54:11.849:E / UncaughtException(17818):at   com.zfdang.multiple_images_selector.ImagesSelectorActivity.onRequestPermissionsResult(未知   来源: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):在   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(未知来源:0)08-02   22:54:11.849:E / UncaughtException(17818):在   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):在   android.os.Looper.loop(Looper.java:164)08-02 22:54:11.849:   E / UncaughtException(17818):在   android.app.ActivityThread.main(ActivityThread.java:6494)08-02   22:54:11.849:E / UncaughtException(17818):在   java.lang.reflect.Method.invoke(本机方法)08-02 22:54:11.849:   E / UncaughtException(17818):在   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):由以下原因引起:   java.lang.NoSuchFieldException:类中没有字段producerIndex   Lrx / internal / util / unsafe / SpscArrayQueueProducerFields; (声明   “ rx.internal.util.unsafe.SpscArrayQueueProducerFields”出现在   /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(本机方法)08-02 22:54:11.849:   E / UncaughtException(17818):在   rx.internal.util.unsafe.UnsafeAccess.addressOf(未知来源:0)08-02   22:54:11.849:E / UncaughtException(17818):... 22更多

我试图添加一些Proguard规则以避免崩溃,但是它不起作用:

-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.**

1 个答案:

答案 0 :(得分:2)

-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 

请尝试在Proguard规则中添加缺少的行。