Firebase UI库的Proguard配置



在启用proguard的情况下创建APK时,使用Firebase UI库(com.firebaseui:firebase-ui:0.3.0)中的FirebaseRecyclerAdapter时会引发以下异常:

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

调试版本(不带proguard)运行良好。谁有适用于Firebase UI的proguard配置?

我当前的proguard配置如下(仅与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.** { *; }

通过将FirebaseRecyclerAdapter使用的ViewHolder类移动到专用包(例如com.mypackage.myapp.viewholders)并在proguard配置中添加一条规则来防止该包中的类被proguard:混淆来解决此问题

-keep class com.mypackage.myapp.viewholders.** { *; }

好吧,我把相对FirebaseRecyclerAdapter中的ViewHolder作为内部类,并给了我这个错误。创建内部类解决了这个问题。

此外https://github.com/firebase/FirebaseUI-Android/issues/46#issuecomment-167373575用加法陈述了同样的事情。

内部类ViewHolder必须是publicstatic,这样它才能通过反射启动。

最新更新