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