【问题标题】:How can ProGuard keep class implements clause(class signature)ProGuard如何保留类实现子句(类签名)
【发布时间】:2016-05-01 02:39:25
【问题描述】:

我有一个实现 Android Parcelable 的类,它有一个名为 CREATOR 的字段,它实现了 Parcelable.Creator。我可以通过以下配置让 ProGuard 保留 CREATOR 字段:

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

但我不知道如何让 ProGuard 保留 CREATOR 匿名类签名,因此,CREATOR 匿名实现的混淆类如下所示:

final class i extends Object

我们可以看到它丢失了implements Parcelable.Creator 签名,所以当我启动我的应用程序时,它崩溃了,并出现以下异常:

java.lang.ClassCastException: com.github.piasy.model.b.b.i cannot be 
cast to android.os.Parcelable$Creator

我知道我可以让 ProGuard 保留所有内部类(因此 Parcelable.Creator 实现根本不会被混淆),但我想知道我是否可以只保留类签名(implements Parcelable.Creator 部分)。

我试过-keepattributes Signature,还是不行。

【问题讨论】:

    标签: android proguard parcelable


    【解决方案1】:

    感谢https://github.com/zhenghuiy,半年后解决。

    原来更新我的Android构建工具后,这个问题就消失了,也不需要下面的配置:

    -keepclassmembers class * implements android.os.Parcelable {
        static ** CREATOR;
    }
    

    【讨论】:

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