>我有两个接口
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 接口中为 a
、b
和 c
设置注释,因为我有 2 个(以后可能更多)子接口为@MyAnnotation
设置其他值
那么,有没有办法告诉ProGuard将重复的方法名称保留在子接口中?
我找到了解决方案! :)
-keepclassmembers,allowobfuscation,allowoptimization interface * extends path.to.my.interface.Base{*;}
这或多或少地禁用了扩展Base
接口的任何接口的收缩。
Proguard 有一个专用标志来禁用优化。一般表示法是:
-dontoptimize
但是,它将关闭所有优化,这在您的特定情况下可能是不可取的。实际上,您可以通过显式声明优化过滤器来选择要禁用的优化:
-dontoptimize optimization_filter_name
我不是 100% 确定哪一个可以在这里提供帮助,但我怀疑class/merging/vertical
过滤器负责删除接口重复方法。您可以在此处找到优化列表,并尝试哪一个有帮助。