4

创建启用了 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.** { *; }
4

2 回答 2

14

ViewHolder通过将使用的类移动FirebaseRecyclerAdapter到专用包(例如 com.mypackage.myapp.viewholders)并在 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声明了同样的事情并添加了内容。

内部类ViewHolder必须是publicandstatic以便它可以通过反射启动。

于 2016-05-29T15:40:27.577 回答