Android greenrobot事件总线的ProGuard配置

Android greenrobot事件总线的ProGuard配置,android,android-proguard,event-bus,greenrobot-eventbus,greenrobot-eventbus-3.0,Android,Android Proguard,Event Bus,Greenrobot Eventbus,Greenrobot Eventbus 3.0,我在我的应用程序中使用eventbus,它在debuge模式下运行良好,但在release APK上不起作用 以下代码用于ProGuard配置: -keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; }

我在我的应用程序中使用eventbus,它在debuge模式下运行良好,但在release APK上不起作用

以下代码用于ProGuard配置:

  -keepattributes *Annotation*
  -keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
   }
  -keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keepattributes*注释*
-keepclassmembers类**{
@org.greenrobot.eventbus.Subscribe;
}
-保持枚举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()” 空对象引用 位于com.dhaval.example.view.activity.MainActivity.b(源文件:150) 位于com.dhaval.example.view.activity.MainActivity.onEventBusEvent(源文件:560) 位于java.lang.reflect.Method.invoke(本机方法) 位于org.greenrobot.eventbus.c.a(源文件: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(源文件:140) 位于com.dhaval.example.view.a.r$1.a(源文件:130) 位于com.dhaval.example.f.ap$2.a(源文件:90) 位于com.dhaval.example.f.ap$2.a(源文件:85) 在com.dhaval.example.network.a$1.a(源文件:101) at rx.c.a.a_389;(源文件:134) at rx.internal.operators.n$a.a(源文件:224) 在rx.a.b.b$b.run时(源文件: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” null对象上的com.dhaval.example.model.entity.Dashboard.b.a() 参考文献


听起来确实与proguard相关,但可能不是关于eventbus,而是关于您自己的model.entity.Dashboard类。可能需要将model.entity.Dashboard添加到proguard异常中:

-keep class model.entity.Dashboard.** { *; } 

对我来说,这似乎与事件无关。它只是您自己的model.entity.Dashboard类中的一个NPE。可能您需要将model.entity.Dashboard添加到proguard异常中:-保留类model.entity.Dashboard.*{*;},但这段代码将用于调试apkOk。也许这实际上是关于绿色机器人proguard的配置。您确定在发布目标的gradle文件中应用了这些规则吗?还要在model.entity.Dashboard.b.a()中检查并添加检查,确保订阅服务器不为null-这样它就不会与NPE崩溃(但可能仍然无法工作)@shtolik谢谢您的快速回复:)我会检查并返回到you@shtolik非常感谢-保留class model.entity.Dashboard.*{*;}这段代码对我很有用