2016-07-25 3 views
1

Я размещаю некоторые события, и подписанный код работает правильно при отладке apk, но тот же код сбой, когда я подписываю apk с моим хранилищем ключей и устанавливаю приложение.Ошибка Eventbus в подписанном apk

java.lang.RuntimeException: Unable to start activity ComponentInfo 
{com.example.friendz/com.example.friendz.shivaraj.activities.MainActivity}: 
a.a.a.h: Subscriber class com.example.friendz.shivaraj.activities.MainActivity 
and its super classes have no public methods with the @Subscribe annotation 

Но моя основная деятельность Абоненты с @Subscribe определены

У меня есть этот абонент в своей деятельности

@Subscribe 
public void updateLocationEvent(String isStartLoc) { 
    Log.d("eventbuus", "stop event rcvd"); 
if (isStartLoc.equals("start")) { 
    startLocationUpdates(); 
} else { 
    stopLocationUpdates(); 
} 
} 

И я регистрация & регистрации, как этого

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
    EventBus.getDefault().register(this); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
}  
+0

Может попробовать обертывание 'String' в вашем собственном пользовательском POJO. (сделайте простой класс с 1 полем типа String с геттером). Посмотрите, если это имеет значение. – Vucko

+0

Вы используете proguard в сборке релизов? – Muthu

+0

Да. Я получил его .. –

ответ

2

Добавьте это в свой конфигурационный файл proguard

ProGuard обфускает имена методов и может удалять методы, которые не называются (удаление мертвого кода). Поскольку методы подписчика напрямую не вызываются, ProGuard ошибочно воспринимает их как неиспользуемые. Таким образом, если вы включите минимизацию ProGuard, вы должны сообщить ProGuard о сохранении этих методов подписчика. Используйте следующий надрез в файле конфигурация ProGuard (proguard.cfg), чтобы предотвратить Абонент от удаления:

-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); 
} 
+0

Отличный ответ .. после долгого времени получит решение !!! –

Смежные вопросы