我有Android框架ObjectAnimator
实例使用的方法。因此它们似乎未被使用(它们通过反射使用)并且我添加了SuppressWarnings("unused")
注释,因此IntelliJ不会为它们显示警告。然而,ProGuard仍然剥离它们,我需要明确告诉他不要。这很乏味,似乎是多余的(违反DRY)。是否可以将ProGuard配置为不使用SuppressWarnings("unused")
删除方法?
答案 0 :(得分:4)
官方文档中描述了告诉ProGuard保留某些类和成员(字段和方法)的选项:http://proguard.sourceforge.net/manual/usage.html#keepoptions。
您可以告诉ProGuard使用以下方式保留班级成员:
-keepclassmembers class_specification
您的class_specification
将如下所示:
class * {
@java.lang.SuppressWarnings <methods>;
}
所以,在你的proguard.cfg
中你应该有这样的东西:
-keepclassmembers class * {
@java.lang.SuppressWarnings <methods>;
}
答案 1 :(得分:1)
我遇到了与Dexguard类似的剥离问题。我以一种非常肮脏的方式解决了问题,把它放在某个地方:
if(System.currentTimeMillis() < 0 ){ //never happens
//..
//TODO directly invoke stripped methods
//..
}
答案 2 :(得分:1)
很抱歉找到一个死线程,但我最近碰到了这个并发现它是不可能的。由于SuppressWarnings
具有SOURCE
级别保留,因此它不在Proguard(as covered in this SO post)处理的类文件中。我最终使用了android支持的@Keep
注释,并使用类似于Adam的规则对其进行配置:
-keepclassmembers class * {
@proguard.annotation.Keep <methods>;
}