Android proguard don';不要保持匿名类

Android proguard don';不要保持匿名类,android,proguard,Android,Proguard,我在运行时出错: 找不到类“android.support.v7.widget.SearchView$5”, 引用自方法 android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11 我试图通过这个proguard配置来保持这个类: -keepattributes Exceptions,InnerClasses,Signature,Deprecated, So

我在运行时出错:

找不到类“android.support.v7.widget.SearchView$5”, 引用自方法 android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11

我试图通过这个proguard配置来保持这个类:

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-keep class android.support.v7.widget.SearchView { public *; }

-keep class android.support.v7.widget.SearchView$* {
    *;
}
-keep class android.support.v7.widget.SearchView** {
    *;
}

-keep class android.support.v7.widget.SearchView$5 {
    *;
}

但是没有运气。这不是第一次proguard不通过配置保留成员,但这次我无法重写代码以将匿名转换为内部类。

请确保您在
/tools/proguard
上拥有最新的proguard版本,然后查看
proguard android.txt
。最新的proguard版本为android提供了更好的配置

一些可能对您有所帮助的定义:

-dontoptimize
-dontpreverify
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}
-不要优化
-不要翻转
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
-keepclassmembers类**.R$*{
公共静态;
}

ProGuard在代码或库中找不到android.support.v7.widget.SearchView$5类。您应该检查支持jar中是否存在android/support/v7/widget/SearchView$5.class。它似乎出现在我这里的最新版本中,所以可能你的副本被破坏了

请注意,添加-keep选项在这里没有帮助。ProGuard在阅读类之后立即检查它们之间的依赖关系,然后再使用这些选项。

这对我来说很有用(没有public):


我使用最新的SDK和完全默认的配置作为您的。但没有一条规则与我的问题相匹配。
 -keep class android.support.v7.widget.SearchView { *; }