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