【问题标题】:ProGuard configuration of greenrobot event busgreenrobot 事件总线的 ProGuard 配置
【发布时间】:2017-07-14 06:27:57
【问题描述】:

我在我的应用程序中使用了 eventbus,它在调试模式下工作正常,但在发布 APK 上不工作。

以下用于 ProGuard 配置的代码:

  -keepattributes *Annotation*
  -keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
   }
  -keep enum 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()' on 空对象引用 在 com.dhaval.example.view.activity.MainActivity.b(SourceFile:150) 在 com.dhaval.example.view.activity.MainActivity.onEventBusEvent(SourceFile:560) 在 java.lang.reflect.Method.invoke(本机方法) 在 org.greenrobot.eventbus.c.a(SourceFile: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(SourceFile:140) 在 com.dhaval.example.view.a.r$1.a(SourceFile:130) 在 com.dhaval.example.f.ap$2.a(SourceFile:90) 在 com.dhaval.example.f.ap$2.a(SourceFile:85) 在 com.dhaval.example.network.a$1.a_(SourceFile:101) 在 rx.c.a.a_(SourceFile:134) 在 rx.internal.operators.n$a.a(SourceFile:224) 在 rx.a.b.b$b.run(SourceFile: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 com.dhaval.example.model.entity.Dashboard.b.a()' 在空对象上 参考

【问题讨论】:

  • 我觉得它似乎与事件总线无关。它只是您自己的 model.entity.Dashboard 类中的 NPE。可能您需要将该 model.entity.Dashboard 添加到 proguard 异常中:-keep class model.entity.Dashboard.** { *; }
  • 但是同样的代码可以用于调试 apk
  • 好的。可能实际上与greenrobot proguard配置有关。您确定要在发布目标的 gradle 文件中应用这些规则吗?还仍然检查并在您的 model.entity.Dashboard.b.a() 中添加检查订阅者不为空 - 然后它不会因 NPE 崩溃(但可能仍然无法工作)
  • @shtolik 谢谢你的快速回复 :) 我会检查并回复你
  • @shtolik 非常感谢 -keep class model.entity.Dashboard.** { *;这段代码对我有用

标签: android android-proguard event-bus greenrobot-eventbus greenrobot-eventbus-3.0


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多