【发布时间】:2013-04-10 23:44:02
【问题描述】:
是否有明确的方法来阻止 ProGuard 更改类以实现接口?
我有一个实现java.io.Serializable 的类,我们称之为com.my.package.name.Foo。我发现通过 ProGuard 运行后,它不再实现Serializable。如果我使用instanceof Serializable 检查实例,我会在从Serializable 转换为Foo 和false 后得到null。我确保将 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 从未用作 Serializable,但考虑到我将它作为参数传递给 Bundle.putSerializable(String, Serializable) 并且我做了一个隐式转换:Serializable serializable = foo;,这似乎不太可能。事实上,当我调试时,我可以看到Foo 被放入Bundle 中,我可以检查Bundle 并在那里看到Foo 的实例,但是在检索它时转换失败。
【问题讨论】:
标签: java android proguard serializable