日志信息:
org.greenrobot.eventbus.e: Subscriber class com.zero.xbzx.module.question.presenter.SelectPicActivity and its super classes have no public methods with the @Subscribe annotation
at org.greenrobot.eventbus.p.a(SubscriberMethodFinder.java:67)
at org.greenrobot.eventbus.c.a(EventBus.java:140)
at com.zero.xbzx.module.question.presenter.SelectPicActivity.onCreate(SelectPicActivity.java:100)
at android.app.Activity.performCreate(Activity.java:6861)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2710)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2818)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThreadH.handleMessage(ActivityThread.java:1557)atandroid.os.Handler.dispatchMessage(Handler.java:102)atandroid.os.Looper.loop(Looper.java:163)atandroid.app.ActivityThread.main(ActivityThread.java:6401)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.ZygoteInitH.handleMessage(ActivityThread.java:1557)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6401)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInitH.handleMessage(ActivityThread.java:1557)atandroid.os.Handler.dispatchMessage(Handler.java:102)atandroid.os.Looper.loop(Looper.java:163)atandroid.app.ActivityThread.main(ActivityThread.java:6401)atjava.lang.reflect.Method.invoke(NativeMethod)atcom.android.internal.os.ZygoteInitMethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:791)
本人问题补充:
debug版本没问题,replace包出现的此错误
解决方案:
网上方案一:
原因:register方法传入的是this,而不是context
代码修改成:
EventBus.getDefault().unregister(this);
网上方案二:
原因:混淆出错 eventbus不同版本 包名不一致
解决:查找对应正确混淆方案
下面是3.0.0版
-keepattributes *Annotation*
-keepclassmembers class ** {
@de.greenrobot.event.Subscribe <methods>;
}
-keep enum de.greenrobot.event.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent {
<init>(Java.lang.Throwable);
}
-keepclassmembers class ** {
public void onEvent*(**);
}
网上方案三:
原因:EventBus重复注册
解决:添加判断 如果已经注册不再注册 同样解绑也是
代码:
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
//解除注册
if (EventBus.getDefault().isRegistered(this)){
EventBus.getDefault().unregister(this);
}
方案四: 本人错在这里!!!
原因:少了配置混淆
解决:添加关键混淆代码
关键代码:
-keepclassmembers class ** {
public void getMessage*(**); //getMessage是重点 这里要和你接收消息的方法名一样。否则replace包会一直报这个错
//一般默认方法名为 onEvent
}
完整混淆代码
#----------------EventBus----------------
-keepclassmembers class ** {
public void getMessage*(**);
}
-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使用与混淆配置
本文详细解析了在Android开发中使用EventBus遇到的问题及解决方案,包括注册方法不当、混淆配置错误、重复注册等问题,并提供了具体代码修改示例。
2715

被折叠的 条评论
为什么被折叠?



