1# 2# This ProGuard configuration file illustrates how to use annotations for 3# specifying which classes and class members should be kept. 4# Usage: 5# java -jar proguard.jar @examples.pro 6# 7 8# Specify the input, output, and library jars. 9# This is assuming the code has been compiled in the examples directory. 10 11#-injars examples(*.class) 12-injars classes(*.class) 13-outjars out 14 15-libraryjars <java.home>/lib/rt.jar 16 17# Some important configuration is based on the annotations in the code. 18# We have to specify what the annotations mean to ProGuard. 19 20-include lib/annotations.pro 21 22# 23# We can then still add any other options that might be useful. 24# 25 26# Print out a list of what we're preserving. 27 28-printseeds 29 30# Preserve all annotations themselves. 31 32-keepattributes *Annotation* 33 34# Preserve all native method names and the names of their classes. 35 36-keepclasseswithmembernames class * { 37 native <methods>; 38} 39 40# Preserve the special static methods that are required in all enumeration 41# classes. 42 43-keepclassmembers class * extends java.lang.Enum { 44 public static **[] values(); 45 public static ** valueOf(java.lang.String); 46} 47 48# Explicitly preserve all serialization members. The Serializable interface 49# is only a marker interface, so it wouldn't save them. 50# You can comment this out if your application doesn't use serialization. 51# If your code contains serializable classes that have to be backward 52# compatible, please refer to the manual. 53 54-keepclassmembers class * implements java.io.Serializable { 55 static final long serialVersionUID; 56 static final java.io.ObjectStreamField[] serialPersistentFields; 57 private void writeObject(java.io.ObjectOutputStream); 58 private void readObject(java.io.ObjectInputStream); 59 java.lang.Object writeReplace(); 60 java.lang.Object readResolve(); 61} 62