4

Proguard を有効にして APK を作成する場合、Firebase-UI ライブラリの FirebaseRecyclerAdapter を使用すると、次の例外がスローされます ( com.firebaseui:firebase-ui:0.3.0)。

java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [class android.view.View]
                                                                              at com.firebase.ui.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:168)

デバッグ バージョン (proguard なし) は正常に動作します。Firebase-UI の有効なプロガード構成を持っているのは誰ですか?

私の現在のプロガード構成は次のようになります(Firebase関連部分のみ):

-optimizationpasses 5
-keepattributes SourceFile,LineNumberTable,Exceptions, Signature, InnerClasses,*Annotation*

-keepnames class ** { *; }

-keep class com.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
4

2 に答える 2

14

ViewHolderによって使用されるクラスを専用パッケージ (com.mypackage.myapp.viewholders など) に移動し、FirebaseRecyclerAdapterこのパッケージ内のクラスが proguard によって難読化されるのを防ぐために、proguard 構成内にルールを追加することで、これを解決しました。

-keep class com.mypackage.myapp.viewholders.** { *; }
于 2016-01-12T08:49:52.130 に答える
2

さて、私は内部クラスとしてViewHolder内部の親戚を持っていて、このエラーを出しました。FirebaseRecyclerAdapter内部クラスを作成することで問題は解決しました。

また、 https://github.com/firebase/FirebaseUI-Android/issues/46#issuecomment-167373575も同じことを追加で述べています。

リフレクションを介して開始できるように、内部クラスはand でViewHolderなければなりません。publicstatic

于 2016-05-29T15:40:27.577 に答える