2012-07-23 135 views
23

我有一堆類使用例如一個@Singleton註釋像這樣在Proguard中保留帶註釋的類

@Singleton 
public class ImageCache 

我想保留。我如何配置proguard -keep語句,使其適用於所有具有該註釋的類。

順便說一句,我需要這個在Android上使用Roboguice的應用程序,這就是爲什麼我添加了標籤。可能幫助別人。

回答

32

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

2

首先定義一個註解

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 *; 
}