Firebase-UI库的Proguard配置

时间:2016-01-10 20:45:29

标签: android firebase android-proguard firebase-realtime-database firebaseui

创建启用了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的工作程序配置?

我当前的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.** { *; }

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

好吧,我将ViewHolder内部相对FirebaseRecyclerAdapter作为内部类,并给了我这个错误。使内部阶级解决了这个问题。

同样https://github.com/firebase/FirebaseUI-Android/issues/46#issuecomment-167373575说明添加内容相同。

内部班级ViewHolder必须是publicstatic,以便可以通过反思启动。