【发布时间】:2014-10-23 16:03:40
【问题描述】:
我在我的 Proguard 配置中使用此块来防止使用 @AccessedViaReflection 注释的方法被混淆,并且在简单的情况下它可以正常工作:
-keepclassmembers class * {
@com.mimvista.AccessedViaReflection <fields>;
@com.mimvista.AccessedViaReflection <methods>;
@com.mimvista.AccessedViaReflection <init>(...);
}
然而,当一个类重写一个用@AccessedViaReflection 注解的方法并缩小返回类型时,被重写的方法会被混淆。 (仅当返回类型变窄时才会出现此问题。)例如:
public class A {
@AccessedViaReflection
public Object get() {return null;}
}
public class B extends A {
@Override
public String get() {return "";}
}
在这种情况下,B 的 'get()' 方法最终会被 Proguard 混淆。 (实际上,生成的类文件以 2 种方法结束。一种称为 get(),返回 Object,另一种称为 a(),返回 String。)这是不可取的,并且会破坏我们的一些反射代码。有没有办法让注释适用于缩小覆盖?
【问题讨论】:
标签: java reflection proguard obfuscation