我正试图用Proguard来混淆一个可以上课的课程:
在添加Parcelable部分之前,该类是:
public class Foo{ private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
混淆的结果是:
public class a { private String a; public String a() { return this.a; } public void a(String paramString) { this.a = paramString; } }
添加实现parcelable后,示例类是
public class Foo implements Parcelable { private String value; private Foo(Parcel in) { value = in.readString(); } public Foo() { } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest,int flags) { dest.writeString(value); } public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>() { public Foo createFromParcel(Parcel in) { return new Foo(in); } public Foo[] newArray(int size) { return new Foo[size]; } }; }
混淆的结果是
public class Foo implements Parcelable { public static final Parcelable.Creator CREATOR = new a(); private String a; public Foo() { } private Foo(Parcel paramParcel) { this.a = paramParcel.readString(); } public String a() { return this.a; } public void a(String paramString) { this.a = paramString; } public int describeContents() { return 0; } public void writeToParcel(Parcel paramParcel,int paramInt) { paramParcel.writeString(this.a); } } class a implements Parcelable.Creator { public Foo a(Parcel paramParcel) { return new Foo(paramParcel,null); } public Foo[] a(int paramInt) { return new Foo[paramInt]; } }
我如何配置proguard来混淆整个类(包括名称,参数和方法),除了parcelable部分?
谢谢
解决方法
尝试将它放在proguard.cfg文件中:
-keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
这应该保留Parcelable部分并混淆其他一切.