在Proguard中保留带注释的类
问题描述:
我有一堆类使用例如一个@Singleton注释像这样在Proguard中保留带注释的类
@Singleton
public class ImageCache
我想保留。我如何配置proguard -keep语句,使其适用于所有具有该注释的类。
顺便说一句,我需要这个在Android上使用Roboguice的应用程序,这就是为什么我添加了标签。可能帮助别人。
答
ProGuard基于具有通配符的类似java的配置。它确实需要完全合格的类名称。这应该工作:
-keep @com.google.inject.Singleton public class *
答
首先定义一个注解
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 *;
}
这一个是一块金子。保持jackson 1,jackson 2和gson注释类是非常有用的。 ;)埃里克,我认为proguard手册应该更明确地保留注释的类,方法,字段等。 – Snicolas 2013-06-07 08:50:04
我还必须添加keepclassmembers。但是你提供了一个好主意,所以+1 – 2015-05-09 22:23:49
另外,如果您使用自定义注释,请确保RetentionPolicy是CLASS或RUNTIME,否则proguard将无法找到它们。 – Alex 2017-03-10 13:14:27