1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# This ProGuard configuration file illustrates how to process a program
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# library, such that it remains usable as a library.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Usage:
5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#     java -jar proguard.jar @library.pro
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Specify the input jars, output jars, and library jars.
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# In this case, the input jar is the program library that we want to process.
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-injars  in.jar
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-outjars out.jar
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-libraryjars  <java.home>/lib/rt.jar
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Save the obfuscation mapping to a file, so we can de-obfuscate any stack
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# traces later on. Keep a fixed source file attribute and all line number
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# tables to actually get these stack traces.
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# You can comment this out if you're not interested in stack traces.
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-printmapping out.map
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-renamesourcefileattribute SourceFile
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato                SourceFile,LineNumberTable,EnclosingMethod
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Preserve all annotations.
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepattributes *Annotation*
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Preserve all public classes, and their public and protected fields and
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# methods.
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keep public class * {
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public protected *;
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Preserve all .class method names.
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepclassmembernames class * {
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    java.lang.Class class$(java.lang.String);
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    java.lang.Class class$(java.lang.String, boolean);
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Preserve all native method names and the names of their classes.
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepclasseswithmembernames class * {
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    native <methods>;
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Preserve the special static methods that are required in all enumeration
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# classes.
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepclassmembers class * extends java.lang.Enum {
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public static **[] values();
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public static ** valueOf(java.lang.String);
56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Explicitly preserve all serialization members. The Serializable interface
59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# is only a marker interface, so it wouldn't save them.
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# You can comment this out if your library doesn't use serialization.
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# If your code contains serializable classes that have to be backward
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# compatible, please refer to the manual.
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato-keepclassmembers class * implements java.io.Serializable {
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    static final long serialVersionUID;
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    static final java.io.ObjectStreamField[] serialPersistentFields;
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private void writeObject(java.io.ObjectOutputStream);
68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    private void readObject(java.io.ObjectInputStream);
69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    java.lang.Object writeReplace();
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    java.lang.Object readResolve();
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# Your library may contain more items that need to be preserved; 
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# typically classes that are dynamically created using Class.forName:
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# -keep public class mypackage.MyClass
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# -keep public interface mypackage.MyInterface
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato# -keep public class * implements mypackage.MyInterface
79