Android Firebase UI库的Proguard配置

Android Firebase UI库的Proguard配置,android,firebase,android-proguard,firebase-realtime-database,firebaseui,Android,Firebase,Android Proguard,Firebase Realtime Database,Firebaseui,创建启用proguard的APK时,使用Firebase UI库中的FirebaseRecyclerAdapter(com.firebaseui:Firebase UI:0.3.0)时会引发以下异常: 通过将FirebaseRecyclerAdapter使用的ViewHolder类移动到专用包(例如com.mypackage.myapp.viewholders)并在proguard配置中添加规则来解决此问题,以防proguard混淆此包中的类: -keep class com.mypackage

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


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

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

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

也用一个加法陈述同样的事情


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

异常来自FirebaseUI代码。FirebaseUI for Android使用反射创建ViewHolder实例。您需要将
-keep class com.yourpackage.yourviewholder{*;}
添加到proguard配置中,这样它就不会删除您的视图持有者。感谢您的评论,Frank,它为我指明了正确的方向。但是,我无法用一条规则来解决这个问题,该规则指向您所指出的视图持有者;我把它们作为内部类保存。我尝试了这里提出的大多数解决方案,但最终没有找到有效的解决方案。最后,我解决了这个问题,将我的viewholder移动到一个专用的包中,并添加:
-keep class com.mypackage.myapp.viewholders.*{*}
这很好。如果我找到一个更好的方法,我会把它贴在这里。对我来说这是一个很好的解决方案。你能把它作为一个答案吗?我已经尝试了在StackOverflow上找到的所有其他解决方案,但只有这一个对我有效!谢谢
-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.** { *; }
-keep class com.mypackage.myapp.viewholders.** { *; }