【问题标题】:Proguard keep overriden methods inside interfaces that extends another interfaceProguard 将覆盖的方法保留在扩展另一个接口的接口中
【发布时间】:2013-09-29 20:37:51
【问题描述】:

我有两个接口

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 个(可能稍后更多)为 @MyAnnotation 设置其他值的子接口

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

【问题讨论】:

    标签: java interface proguard


    【解决方案1】:

    我找到了解决方案! :)

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

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

    【讨论】:

      【解决方案2】:

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

      -dontoptimize
      

      但是,它会关闭所有优化,这在您的特定情况下可能是不可取的。实际上,您可以通过显式声明优化过滤器来选择要禁用的优化:

      -dontoptimize optimization_filter_name
      

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

      【讨论】:

      • 我有 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 已经应该禁用合并?前面有感叹号“!”的优化被排除在与过滤器中的后续优化名称匹配的进一步尝试中。
      • 即使当我评论我的-optimizations 行并添加-dontoptimize 时,方法也被删除了:(
      • hmmm,这意味着真正的原因不是优化。尝试使用“-dontshrink”禁用收缩
      • 是的,在看了更多之后,我也喜欢缩小的东西。但我找到了一个比使用-dontshrink 禁用整个代码收缩更好的方法,看看我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2015-03-25
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多