Android proguard don';不要保持匿名类
我在运行时出错: 找不到类“android.support.v7.widget.SearchView$5”, 引用自方法 android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11 我试图通过这个proguard配置来保持这个类: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
-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 { *; }