Proguard在扩展另一个接口的接口内部保留重写方法

时间:2013-09-29 11:01:08

标签: java interface proguard

我有两个接口

public interface Base {
   void methA();
   void methB();
   void methC();
}

public interface Sub extends Base {
   @MyAnnotation("a")
   void methA();
   @MyAnnotation("b")
   void methB();
   @MyAnnotation("c")
   void methC();
   @MyAnnotation("d")
   void methD();
   @MyAnnotation("e")
   void methE();
}
在proguard之后我有这两个接口

public interface a{
   void a();
   void b();
   void c();
}

public interface b extends a{
   @MyAnnotation("d")
   void d();
   @MyAnnotation("e")
   void e();
}

但是对于第二个我需要

public interface b extends a{
   @MyAnnotation("a")
   void a();
   @MyAnnotation("b")
   void b();
   @MyAnnotation("c")
   void c();
   @MyAnnotation("d")
   void d();
   @MyAnnotation("e")
   void e();
}

这意味着,我需要使用其注释的覆盖方法。我不关心方法名称我只需要注释。

我无法在Base接口中为abc设置注释,因为我有2个(可能更晚)Sub接口为{{设置其他值1}}

那么,有没有办法告诉proguard在子接口中保留重复的方法名称?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案! :)

-keepclassmembers,allowobfuscation,allowoptimization interface * extends path.to.my.interface.Base{*;}

这或多或少会禁用任何扩展Base接口的接口缩小。

答案 1 :(得分:0)

Proguard有一个专用标志来禁用优化。一般符号是:

-dontoptimize
但是,它会关闭所有优化,这在您的特定情况下可能是不可取的。 Actualy您可以通过明确说明优化过滤器来选择要禁用的优化:

-dontoptimize optimization_filter_name

我并非100%确定哪一个可以提供帮助,但我怀疑class/merging/vertical过滤器负责删除接口重复方法。您可以找到优化列表here并尝试哪一个帮助。