在Proguard中保留带注释的类

在Proguard中保留带注释的类

问题描述:

我有一堆类使用例如一个@Singleton注释像这样在Proguard中保留带注释的类

@Singleton 
public class ImageCache 

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

顺便说一句,我需要这个在Android上使用Roboguice的应用程序,这就是为什么我添加了标签。可能帮助别人。

ProGuard基于具有通配符的类似java的配置。它确实需要完全合格的类名称。这应该工作:

-keep @com.google.inject.Singleton public class * 
+6

这一个是一块金子。保持jackson 1,jackson 2和gson注释类是非常有用的。 ;)埃里克,我认为proguard手册应该更明确地保留注释的类,方法,字段等。 – Snicolas 2013-06-07 08:50:04

+0

我还必须添加keepclassmembers。但是你提供了一个好主意,所以+1 – 2015-05-09 22:23:49

+2

另外,如果您使用自定义注释,请确保RetentionPolicy是CLASS或RUNTIME,否则proguard将无法找到它们。 – Alex 2017-03-10 13:14:27

首先定义一个注解

public @interface DoNotStrip {} 

然后把这个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 *; 
}