2

いくつかのイベントを投稿していますが、サブスクライブしたコードはデバッグ apk で正しく動作しますが、キーストアで 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);
}    
4

1 に答える 1

5

これをプロガード構成ファイルに追加します

ProGuard はメソッド名を難読化し、呼び出されないメソッドを削除する場合があります (デッド コードの削除)。Subscriber メソッドは直接呼び出されないため、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);
}
于 2016-07-26T06:04:39.003 に答える