【问题标题】:proguard don't keep anonymous classproguard 不保留匿名类
【发布时间】:2014-05-02 04:47:03
【问题描述】:

我在运行时遇到错误:

找不到类“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第一次不通过配置保留成员,但是这次我不能重写代码来将匿名转换为内部类。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    这对我有用(不公开):

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

    【讨论】:

      【解决方案2】:

      确保您在<Android SDK>/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>;
      }
      

      【讨论】:

      • 我正在使用最新的 SDK 和完全默认的配置作为你的。但没有一条规则符合我的问题。
      【解决方案3】:

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

      请注意,在此处添加 -keep 选项无济于事。 ProGuard 在读取类后立即检查它们之间的依赖关系,然后再使用这些选项。

      【讨论】:

        猜你喜欢
        • 2012-06-13
        • 2013-03-24
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 2015-03-25
        • 1970-01-01
        相关资源
        最近更新 更多