【问题标题】:Rxjava not working after releasingRxjava 发布后不工作
【发布时间】:2016-03-06 05:04:16
【问题描述】:

我在我的应用程序中使用 rxjava,它在我测试时工作正常,但是当我尝试在我的 android 设备中运行签名的 apk 文件时,应用程序在涉及 rxjava 的代码时崩溃了,我添加了这个在proguard-rules中,但应用程序仍然崩溃,有人知道原因吗?这是崩溃信息。

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
    at e.bb.c(Unknown Source)
    at e.bb.(Unknown Source)
    at e.ar.a(Unknown Source)
    at e.ay.invoke(Unknown Source)
    at $Proxy1.a(Native Method)
    at com.kinnov.onlineordering.LoginFragment.a(Unknown Source)
    at com.kinnov.onlineordering.LoginFragment.loginTapped(Unknown Source)
    at com.kinnov.onlineordering.bq.doClick(Unknown Source)
    at butterknife.internal.DebouncingOnClickListener.onClick(Unknown Source)
    at android.view.View.performClick(View.java:4444)
    at android.view.View$PerformClick.run(View.java:18440)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5052)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
    at dalvik.system.NativeStart.main(Native Method)

这是保护规则

-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.subscriptions.Subscriptions{
    public static <methods>;
}
-keep class rx.exceptions.Exceptions{
    public static <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 rx.operators.OperationReplay* {
    *;
}

【问题讨论】:

    标签: android apk rx-java


    【解决方案1】:

    来自https://github.com/artem-zinnatullin/RxJavaProGuardRules/blob/master/rxjava-proguard-rules/proguard-rules.txt

    -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;
     }
    

    你遗漏了我相信的最后一条规则。

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多