我在我的应用程序中使用了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.**
答案 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规则中添加缺少的行。