【问题标题】:EventBus exception when proj is built - Subscriber class has no public methods called onEvent构建 proj 时的 EventBus 异常 - 订阅者类没有称为 onEvent 的公共方法
【发布时间】:2015-06-16 20:46:03
【问题描述】:

因此,我的应用程序在 MainActivity 与后台服务之间交换消息,我使用 EventBus 来处理它。我正在使用

注册这两个组件
EventBus.getDefault().register(this);

在他们的 onCreates 上。我正在发送/接收一个事件:

EventBus.getDefault().post(new MyMessagePojo("message"));

public void onEvent(MyMessagePojo event) { ... }

当我将项目从我的 AndroidStudio 运行到我的测试手机时,一切正常。但是,当我生成签名的 APK 时,我安装了该应用程序并出现了崩溃,并出现以下异常:

Subscriber class my.package.MainActivity has no public methods called onEvent

它显然在哪里。我尝试在我的 MainActivity 中将其从 onEvent 更改为 onEventMainThread 但没有成功。很沮丧,因为我正要发布应用程序,现在我无法解决这个问题。

我经历过thisthis,但它们没有任何帮助。

有什么想法吗?

【问题讨论】:

  • 您的 ProGuard 配置可能正在重命名 onEvent(),因为它认为重命名是安全的。调整项目的 ProGuard 配置以保持该方法不变。
  • 您对此有任何说明/参考吗?我对 ProGuard 配置还不是很熟悉
  • 什么意思?最后我只是关掉了proguard,好像没什么大的区别。

标签: android event-bus greenrobot-eventbus


【解决方案1】:

这在 EventBus HOWTO 文档中得到解决。 https://github.com/greenrobot/EventBus/blob/master/HOWTO.md

使用下面的代码只保留 onEvent 函数。

-keepclassmembers class ** {
    public void onEvent*(**);
}

【讨论】:

  • 谢谢!你的回答有帮助:)
【解决方案2】:

所以我设法保持这种方法在 ProGuard 上添加以下配置:

-keep public class my.package.MainActivity {
    public <methods>;
}

但是,ProGuard 搞砸了我的应用程序中的更多内容。我什至无法登录我的应用程序(我不知道为什么,我只是立即收到网络问题警报)。我正在认真考虑将其关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多