【发布时间】:2016-04-15 02:46:16
【问题描述】:
创建启用 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.** { *; }
【问题讨论】:
-
异常来自 FirebaseUI 代码中的this line。 FirebaseUI for Android 使用反射来创建 ViewHolder 实例。您需要将
-keep class com.yourpackage.yourviewholder { *; }添加到 proguard 配置中,以便它知道不要剥离您的视图持有者。 -
感谢您的评论弗兰克,它为我指明了正确的方向。但是,我无法使用您指出的指向 ViewHolder 的规则来解决它;我将它们保留为内部类。我尝试了这里提出的大多数解决方案:link,但最终没有找到可行的解决方案。最后,我通过将我的查看器移动到一个专用包并添加:
-keep class com.mypackage.myapp.viewholders.** { *; }解决了这个问题。如果我找到更好的方法,我会在这里发布。 -
对我来说听起来是个不错的解决方案。您可以将其添加为答案吗?
标签: android firebase android-proguard firebase-realtime-database firebaseui