Proguard保留所有实现某些接口的内部类

时间:2014-03-05 14:26:45

标签: java android proguard

以下定义有什么问题?

-keep class com.foo.bar。**实现android.content.ServiceConnection {   *; }

我需要将onServiceConnected或disconnect方法保留在:

com.foo.bar.SomeClass $ SomeInnerClass $ SomeInnerInnerClass实现ServiceConnection {  //我需要保留的方法 }

Proguard总是将它们剥离出来。

到目前为止我找到的唯一解决方案是保留整个com.foo.bar包。

注意:我无法保留com.foo.bar.SomeClass,因为名称可以更改。我得到一个JAR文件,其中包含已经受过保护的代码。所以SomeClass实际上被称为“dw”,而SomeInnerClass实际上被称为“a”。但我显然不能依赖它。

感谢。

2 个答案:

答案 0 :(得分:1)

您的配置看起来是正确的,但ProGuard已经自动保留了在ServiceConnection等运行时接口中实现方法的方法。您无需明确指定它们。您可以查看bin / proguard / mapping.txt以查看类和方法的旧/新名称。您可以使用Android工具dexdump检查classes.dex文件,仔细检查类是否存在,它们是否实现了接口,以及方法是否存在。

答案 1 :(得分:0)

我有特殊情况。我编写一个jar文件,只保留一个自定义而不是系统接口实现,并混淆其他包括方法内容。我尝试了很多,找到一种方式或多或少满足我。

-keepclassmembernames class aa.bb.Impl {
    public <methods>;
}