2016-03-06 94 views
0

我在我的应用程序中使用rxjava,当我测试时它工作正常,但是当我尝试在我的Android设备上运行已签名的apk文件时,应用程序在rxjava代码中崩溃,我在proguard-rules中添加了这个,但是应用程序仍然崩溃,任何人都知道原因?这是崩溃信息。Rxjava发布后不工作

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) 

这是proguard的规则

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

回答

0

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

你忽略了最后一个规则,我相信。