如何保持扩展和实现Proguard接口的类

时间:2012-04-24 10:02:05

标签: java proguard

我需要保留所有扩展com.opensymphony.xwork2.ActionSupport的类并实现自定义接口。

当我尝试这个

-keepnames public class * extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes {
 *; 
 }

我收到以下错误:

  

错误期待在'implements'开放'{'

1 个答案:

答案 0 :(得分:3)

如果内存服务,您可以指定扩展另一个实现接口的类OR类的类,但不能同时指定两者。 documentation并没有特别明确这一点,但暗示了这一点。

有几种方法可以解决这个问题,假设你只指定一个或另一个是不够的:

  • 创建一个空的“标记”界面,并让您要保留的类扩展该类。
  • 为您要保留的每个类添加一个静态(如果您愿意,可以是private static final)标记字段,并在-keep选项中指定。
  • 咬紧牙关,只列出你要保留的所有课程的名称。

修改

另一种选择是创建一个这样的类:

public abstract class Foo extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes {
    // ...
}

然后,让你想要保留的所有类扩展该类。然后,您只需在-keep选项中指定* extends Foo