2017-01-31 3 views
1

おはよう、Android ProguardとFirebaseListAdapterが競合しています

私は何が起こっているのか理解しようとしています。 、アプリを作った

デバッグモードで正常に動作しますが、リリースモードではFirebaseListAdapterに私にエラーを与える: は、これは状況です

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("a/"); 
    mAdapter = new FirebaseListAdapter<Acties>(activity, Acties.class, R.layout.list, ref) { 

     @Override 
     public void populateView(View v, Acties model, int position) { 
      ((TextView)v.findViewById(R.id.textView1)).setText(model.getWinkel()); 
      ((TextView)v.findViewById(R.id.textView2)).setText(model.getBericht()); 
      ((TextView)v.findViewById(R.id.textView3)).setText(model.getExpdate()); 
     } 
    }; 

FirebaseListAdapterはゲッターとしてActies.classを使用しています。

public class Acties { 
private String bericht; 
private String winkel; 
private String expdate; 

public Acties() { 
} 

public Acties(String bericht, String expdate, String winkel) { 
    this.bericht = bericht; 
    this.winkel = winkel; 
    this.expdate = expdate; 
} 

public String getBericht() { 
    return bericht; 
} 

public String getExpdate() { 
    return expdate; 
} 

public String getWinkel() { 
    return winkel; 
} 

}

私は、公共の代わりに、プライベートにすべての文字列を編集しました。 (答えによると:https://stackoverflow.com/a/37744290/6510329

これは、アプリケーションのクラッシュを修正しましたが、今私は空のリストを持っています。私は今ListViewを見ることができますが、私のデータベースから取得した情報でいっぱいではありません。

何が起こっていますか?リリースモードのためエラーが表示されません。

私のクラスに@Keepも追加しましたが、それでも動作しませんでした。 (回答:https://stackoverflow.com/a/41141406/6510329

を追加しました。このコードProGuardの-ルールにファイルを:

-keep class com.firebase.** { *; } 
-keep class org.apache.** { *; } 
-keepnames class com.fasterxml.jackson.** { *; } 
-keepnames class javax.servlet.** { *; } 
-keepnames class org.ietf.jgss.** { *; } 
-dontwarn org.w3c.dom.** 
-dontwarn org.joda.time.** 
-dontwarn org.shaded.apache.** 
-dontwarn org.ietf.jgss.** 
今、以前のように私の目に見えるリストを正確に同じを与えたが、

空textviewsと... (回答: https://stackoverflow.com/a/26274623/7157263

は、ProGuardのためにこれらのルールを追加しました:

-keepattributes Signature 
-keepattributes *Annotation* 

まだ何も変更... あらゆるfirebase関数が完璧に機能します。 FirebaseListAdapter/populateview方法以外のイムは今休憩を取るとすぐにそれに戻って得ようとして、このすべてを読み取るための

おかげで、多分それは私に「天才」の瞬間のいくつかの種類を与える

答えて

2

することができますProGuardにメソッドとフィールドをActiesのままにする指示を追加します。ちょうどあなたのProGuardのファイルにこれを追加します。

com.yourproject.ActiesActiesクラスの(パッケージ付き)完全な名前です
-keep class com.yourproject.Acties { *; } 

また、Actiesクラスには@Keepと注釈を付けることができます。これにより、ProGuardは難読化/最適化を適用しながらProGuardをそのままにします。

+0

これは私にとってはうまくいきました:)私は@Keepを使用しましたが、私はproguardで-keepクラスを使用しませんでした。これは私の間違いでした。ありがとう –

+0

'minifyEnabled true'またはfalseを設定する必要があります – Leenah

+0

' minifyEnabled'は 'true'にする必要があります –

関連する問題