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>;
}
我正在处理这个应用程序,我正在使用 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>;
}