Is there an explicit way to stop ProGuard from changing a class from implementing an interface?
I have a class that implements java.io.Serializable
, let's call it com.my.package.name.Foo
. I've found that after running through ProGuard, it no longer implements Serializable
. I get null
after I cast from Serializable
to Foo
and false
if I check an instance with instanceof Serializable
. I've made sure to set ProGuard to ignore this class:
-keep class com.my.package.name.Foo
I've also tried:
-keep class com.my.package.name.Foo { *; }
and I've also tried the whole package by doing this:
-keep class com.my.package.name.** { *; }
or:
-keep class com.my.package.** { *; }
and also just to keep all Serializable
classes:
-keep class * implements java.io.Serializable { *; }
but to no avail. I have another class in a sibling package (roughly: com.my.package.name2.Bar
) that also implements Serializable
and is used similarly but has no issues.
I'm not sure it's relevant, but I'm packing this in a jar for use with Android. The code that uses these classes include putting them in Bundle
s which is why I need Serializable
. I considered that perhaps somehow ProGuard thinks that Foo
is never used as a Serializable
but that seems unlikely given that I pass it as a parameter to Bundle.putSerializable(String, Serializable)
and also I do an implicit cast: Serializable serializable = foo;
. In fact, when I debug, I can see the Foo
get put into the Bundle
and I can examine the Bundle
and see the instance of Foo
there, but when retrieving it the cast fails.
I had the same issue fixed using below config.
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
Official Documentation http://proguard.sourceforge.net/manual/examples.html#serializable