是否有明确的方法来阻止 ProGuard 更改类以实现接口?
我有一个实现的类java.io.Serializable,我们称之为com.my.package.name.Foo。我发现通过 ProGuard 运行后,它不再实现Serializable. 我null从Serializableto 转换后得到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 使用。使用这些类的代码包括将它们放在Bundles 中,这就是我需要Serializable. 我认为 ProGuard 可能以某种方式认为它Foo从未用作 a Serializable,但考虑到我将它作为参数传递给Bundle.putSerializable(String, Serializable)并且我做了一个隐式转换,这似乎不太可能:Serializable serializable = foo;。事实上,当我调试时,我可以看到Fooget 放入了Bundle,我可以检查Bundle并查看那里的实例Foo,但是在检索它时,强制转换失败。