java.lang.RuntimeException: h.b.a.g: Subscriber class DashboardActivity 及其超级 classes 没有带有 @Subscribe 注释的 public 方法

java.lang.RuntimeException: h.b.a.g: Subscriber class DashboardActivity and its super classes have no public methods with the @Subscribe annotation

我正在处理这个应用程序,我正在使用 greenbot 的 EventBus 3.1.1。 我正在尝试的是 post 从片段到 activity 的事件。

奇怪的是我的代码在调试模式下工作得很好,但是当我构建一个发布版本时它在尝试注册时崩溃了。

我搜索了一个答案,结果发现订阅者 class 不应该是 post er class,在我的情况下没有问题关于这件事。

这是我的代码:

在我调用的片段中:

EventBus.getDefault().post(new FireEvent());

在我的 activity:

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

@Override
protected void onStop() {
    if (EventBus.getDefault().isRegistered(this))
        EventBus.getDefault().unregister(this);
    super.onStop();
}

@Override
protected void onStart() {
    super.onStart();
    if (!EventBus.getDefault().isRegistered(this))
        EventBus.getDefault().register(this);
}

然后我订阅了活动:

@Subscribe(threadMode = ThreadMode.MAIN)
public void fireEvent(FireEvent event) {

}

根据文档,您应该为您的发布版本添加这些混淆规则:http://greenrobot.org/eventbus/documentation/proguard

根据@tidder 的回答,我不断尝试添加和删除规则,并找到了完美运行的以下脚本。

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
# EventBus 3.0
-keep class de.greenrobot.event.** { *; }
-keep class * {
    @de.greenrobot.event.* <methods>;
}