我有两个接口
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个(可能更晚)Sub接口为{{设置其他值1}}
那么,有没有办法告诉proguard在子接口中保留重复的方法名称?
答案 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并尝试哪一个帮助。