在Proguard中保留注释课程

Man*_*ser 26 android proguard roboguice

我有很多类使用像@Singleton这样的注释

@Singleton
public class ImageCache
Run Code Online (Sandbox Code Playgroud)

我想保留.如何配置proguard -keep语句,使其适用于具有该注释的所有类.

顺便说一下上下文我在Android上使用Roboguice的应用需要这个,这就是我添加标签的原因.可能会帮助别人.

Eri*_*une 39

ProGuard基于带有通配符的类似Java的配置.它确实需要完全限定的类名.这应该工作:

-keep @com.google.inject.Singleton public class *
Run Code Online (Sandbox Code Playgroud)

  • 这是一块金子.保持杰克逊1,杰克逊2和格森注释课程是非常有用的.;)Eric,我相信proguard手册应该更加明确地保留带注释的类,方法,字段等. (7认同)
  • 我还必须添加keepclassmembers.但你提出了一个好主意,所以+1 (3认同)
  • 此外,如果您使用自定义注释,请确保RetentionPolicy为CLASS或RUNTIME,否则proguard将无法找到它们. (2认同)

Sah*_*ain 9

首先定义一个注释

public @interface DoNotStrip {}
Run Code Online (Sandbox Code Playgroud)

然后将其放在proguard.cfg中:

-keep,allowobfuscation @interface com.something.DoNotStrip

# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.something.DoNotStrip class *
-keepclassmembers class * {
    @com.something.DoNotStrip *;
}
Run Code Online (Sandbox Code Playgroud)

  • 嗨,对于那些发现这个答案适用于他们的情况的人,有一个预定义的注释@androidx.annotation.Keep (3认同)