2016-07-25 7 views
1

いくつかのイベントを投稿しており、購読したコードがデバッグAPK上で正常に動作しますが、私のキーストアでapkに署名してアプリケーションをインストールすると、同じコードがクラッシュします。Signed 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

たぶん、独自のカスタムPOJOで 'STRING'をラップしてみてください。 (getterでString型の1つのフィールドを持つ単純なクラスを作る)。違いがあるかどうかを確認してください。 – Vucko

+0

リリースビルドでproguardを使用していますか? – Muthu

+0

はい。私はそれを持って.. –

答えて

2

よう&登録解除を登録しています

を定義していますあなたのproguard設定ファイルにこれを加えてください

ProGuardはメソッド名を難読化し、呼び出されないメソッド(デッドコードの削除)を削除することがあります。 Subscriberメソッドは直接呼び出されないため、ProGuardはそれらを未使用と間違えてしまいます。したがって、ProGuardの縮小を有効にする場合、ProGuardにそれらのSubscriberメソッドを保持するように指示する必要があります。削除されてから加入者を防ぐために、あなたの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

完璧な答え..長い時間の後に解決策を得る! –

関連する問題