【发布时间】:2017-07-14 06:27:57
【问题描述】:
我在我的应用程序中使用了 eventbus,它在调试模式下工作正常,但在发布 APK 上不工作。
以下用于 ProGuard 配置的代码:
-keepattributes *Annotation*
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
我所有的订阅注解方法也是公开的
Logcat 输出:
无法调度事件:类 com.dhaval.example.model.entity.response.DashboardUnreadStoryResponse 订阅类 com.dhaval.example.view.activity.MainActivity java.lang.NullPointerException:尝试调用虚拟方法 'java.lang.String com.dhaval.example.model.entity.Dashboard.b.a()' on 空对象引用 在 com.dhaval.example.view.activity.MainActivity.b(SourceFile:150) 在 com.dhaval.example.view.activity.MainActivity.onEventBusEvent(SourceFile:560) 在 java.lang.reflect.Method.invoke(本机方法) 在 org.greenrobot.eventbus.c.a(SourceFile:485) 在 org.greenrobot.eventbus.c.a(源文件:420) 在 org.greenrobot.eventbus.c.a(源文件:397) 在 org.greenrobot.eventbus.c.a(源文件:370) 在 org.greenrobot.eventbus.c.d(源文件:251) 在 com.dhaval.example.view.a.r$1.a(SourceFile:140) 在 com.dhaval.example.view.a.r$1.a(SourceFile:130) 在 com.dhaval.example.f.ap$2.a(SourceFile:90) 在 com.dhaval.example.f.ap$2.a(SourceFile:85) 在 com.dhaval.example.network.a$1.a_(SourceFile:101) 在 rx.c.a.a_(SourceFile:134) 在 rx.internal.operators.n$a.a(SourceFile:224) 在 rx.a.b.b$b.run(SourceFile:107) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6290) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 07-14 11:39:43.640 16402-16402/com.dhaval.example D/EventBus:没有订阅者 注册事件类 org.greenrobot.eventbus.j 07-14 11:39:43.657 16402-16402/com.dhaval.example E/com.dhaval.example.view.a.r$1:getResponse 中的错误:尝试 调用虚拟方法'java.lang.String com.dhaval.example.model.entity.Dashboard.b.a()' 在空对象上 参考
【问题讨论】:
-
我觉得它似乎与事件总线无关。它只是您自己的 model.entity.Dashboard 类中的 NPE。可能您需要将该 model.entity.Dashboard 添加到 proguard 异常中:-keep class model.entity.Dashboard.** { *; }
-
但是同样的代码可以用于调试 apk
-
好的。可能实际上与greenrobot proguard配置有关。您确定要在发布目标的 gradle 文件中应用这些规则吗?还仍然检查并在您的 model.entity.Dashboard.b.a() 中添加检查订阅者不为空 - 然后它不会因 NPE 崩溃(但可能仍然无法工作)
-
@shtolik 谢谢你的快速回复 :) 我会检查并回复你
-
@shtolik 非常感谢 -keep class model.entity.Dashboard.** { *;这段代码对我有用
标签: android android-proguard event-bus greenrobot-eventbus greenrobot-eventbus-3.0