是否有明确的方法来阻止 ProGuard 更改类以实现接口?
我有一个实现的类java.io.Serializable
,我们称之为com.my.package.name.Foo
。我发现通过 ProGuard 运行后,它不再实现Serializable
. 我null
从Serializable
to 转换后得到Foo
,false
如果我用instanceof Serializable
. 我确保将 ProGuard 设置为忽略此类:
-keep class com.my.package.name.Foo
我也试过:
-keep class com.my.package.name.Foo { *; }
我也通过这样做尝试了整个包:
-keep class com.my.package.name.** { *; }
或者:
-keep class com.my.package.** { *; }
也只是为了保留所有Serializable
课程:
-keep class * implements java.io.Serializable { *; }
但无济于事。我在同级包中有另一个类(大致:)com.my.package.name2.Bar
,它也实现Serializable
和使用类似但没有问题。
我不确定它是否相关,但我将它包装在一个罐子中以供 Android 使用。使用这些类的代码包括将它们放在Bundle
s 中,这就是我需要Serializable
. 我认为 ProGuard 可能以某种方式认为它Foo
从未用作 a Serializable
,但考虑到我将它作为参数传递给Bundle.putSerializable(String, Serializable)
并且我做了一个隐式转换,这似乎不太可能:Serializable serializable = foo;
。事实上,当我调试时,我可以看到Foo
get 放入了Bundle
,我可以检查Bundle
并查看那里的实例Foo
,但是在检索它时,强制转换失败。