如何配置ProGuard以省略具有SuppressWarnings的方法(“未使用”)

时间:2014-03-15 19:32:44

标签: java android proguard suppress-warnings objectanimator

我有Android框架ObjectAnimator实例使用的方法。因此它们似乎未被使用(它们通过反射使用)并且我添加了SuppressWarnings("unused")注释,因此IntelliJ不会为它们显示警告。然而,ProGuard仍然剥离它们,我需要明确告诉他不要。这很乏味,似乎是多余的(违反DRY)。是否可以将ProGuard配置为不使用SuppressWarnings("unused")删除方法?

3 个答案:

答案 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>;
}