1#
2# This ProGuard configuration file illustrates how to process Android
3# applications.
4# Usage:
5#     java -jar proguard.jar @android.pro
6#
7# If you're using the Android SDK (version 2.3 or higher), the android tool
8# already creates a file like this in your project, called proguard.cfg.
9# It should contain the settings of this file, minus the input and output paths
10# (-injars, -outjars, -libraryjars, -printmapping, and -printseeds).
11# The generated Ant build file automatically sets these paths.
12
13# Specify the input jars, output jars, and library jars.
14# Note that ProGuard works with Java bytecode (.class),
15# before the dex compiler converts it into Dalvik code (.dex).
16
17-injars  bin/classes
18-injars  libs
19-outjars bin/classes-processed.jar
20
21-libraryjars /usr/local/android-sdk/platforms/android-9/android.jar
22#-libraryjars /usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar
23# ...
24
25# Save the obfuscation mapping to a file, so you can de-obfuscate any stack
26# traces later on.
27
28-printmapping bin/classes-processed.map
29
30# You can print out the seeds that are matching the keep options below.
31
32#-printseeds bin/classes-processed.seeds
33
34# Preverification is irrelevant for the dex compiler and the Dalvik VM.
35
36-dontpreverify
37
38# Reduce the size of the output some more.
39
40-repackageclasses ''
41-allowaccessmodification
42
43# Switch off some optimizations that trip older versions of the Dalvik VM.
44
45-optimizations !code/simplification/arithmetic
46
47# Keep a fixed source file attribute and all line number tables to get line
48# numbers in the stack traces.
49# You can comment this out if you're not interested in stack traces.
50
51-renamesourcefileattribute SourceFile
52-keepattributes SourceFile,LineNumberTable
53
54# RemoteViews might need annotations.
55
56-keepattributes *Annotation*
57
58# Preserve all fundamental application classes.
59
60-keep public class * extends android.app.Activity
61-keep public class * extends android.app.Application
62-keep public class * extends android.app.Service
63-keep public class * extends android.content.BroadcastReceiver
64-keep public class * extends android.content.ContentProvider
65
66# Preserve all View implementations, their special context constructors, and
67# their setters.
68
69-keep public class * extends android.view.View {
70    public <init>(android.content.Context);
71    public <init>(android.content.Context, android.util.AttributeSet);
72    public <init>(android.content.Context, android.util.AttributeSet, int);
73    public void set*(...);
74}
75
76# Preserve all classes that have special context constructors, and the
77# constructors themselves.
78
79-keepclasseswithmembers class * {
80    public <init>(android.content.Context, android.util.AttributeSet);
81}
82
83# Preserve all classes that have special context constructors, and the
84# constructors themselves.
85
86-keepclasseswithmembers class * {
87    public <init>(android.content.Context, android.util.AttributeSet, int);
88}
89
90# Preserve the special fields of all Parcelable implementations.
91
92-keepclassmembers class * implements android.os.Parcelable {
93    static android.os.Parcelable$Creator CREATOR;
94}
95
96# Preserve static fields of inner classes of R classes that might be accessed
97# through introspection.
98
99-keepclassmembers class **.R$* {
100  public static <fields>;
101}
102
103# Preserve the required interface from the License Verification Library
104# (but don't nag the developer if the library is not used at all).
105
106-keep public interface com.android.vending.licensing.ILicensingService
107
108-dontnote com.android.vending.licensing.ILicensingService
109
110# The Android Compatibility library references some classes that may not be
111# present in all versions of the API, but we know that's ok.
112
113-dontwarn android.support.**
114
115# Preserve all native method names and the names of their classes.
116
117-keepclasseswithmembernames class * {
118    native <methods>;
119}
120
121# Preserve the special static methods that are required in all enumeration
122# classes.
123
124-keepclassmembers class * extends java.lang.Enum {
125    public static **[] values();
126    public static ** valueOf(java.lang.String);
127}
128
129# Explicitly preserve all serialization members. The Serializable interface
130# is only a marker interface, so it wouldn't save them.
131# You can comment this out if your application doesn't use serialization.
132# If your code contains serializable classes that have to be backward 
133# compatible, please refer to the manual.
134
135-keepclassmembers class * implements java.io.Serializable {
136    static final long serialVersionUID;
137    static final java.io.ObjectStreamField[] serialPersistentFields;
138    private void writeObject(java.io.ObjectOutputStream);
139    private void readObject(java.io.ObjectInputStream);
140    java.lang.Object writeReplace();
141    java.lang.Object readResolve();
142}
143
144# Your application may contain more items that need to be preserved; 
145# typically classes that are dynamically created using Class.forName:
146
147# -keep public class mypackage.MyClass
148# -keep public interface mypackage.MyInterface
149# -keep public class * implements mypackage.MyInterface
150