Android greenrobot事件总线的ProGuard配置
我在我的应用程序中使用eventbus,它在debuge模式下运行良好,但在release APK上不起作用 以下代码用于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 { *; }
-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.*{*;}这段代码对我很有用