3

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

4

3 回答 3

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>;
}
于 2014-03-15T20:07:08.580 回答
2

很抱歉戳了一个死线程,但我最近遇到了这个问题,发现这是不可能的。因为SuppressWarnings具有SOURCE级别保留,所以它不在 Proguard 处理的类文件中(如本 SO 帖子中所述)。我最终改用了 android 支持的@Keep注释,并使用类似于 Adam 的规则对其进行配置:

-keepclassmembers class * {
  @proguard.annotation.Keep <methods>;
}
于 2017-07-18T05:29:48.057 回答
1

我在使用 Dexguard 时遇到过类似的剥离问题。我以一种非常肮脏的方式解决了问题,将其放置在某个地方:

if(System.currentTimeMillis() < 0 ){ //never happens
   //..
   //TODO directly invoke stripped methods
   //..
}
于 2014-03-15T19:41:33.350 回答