| // | |
| // This Gradle build file illustrates how to process Android | |
| // applications. | |
| // Usage: | |
| // gradle -b android.gradle proguard | |
| // | |
| // If you're using the Android SDK, the Ant release build and Eclipse export | |
| // already take care of the proper settings. You only need to enable ProGuard | |
| // by commenting in the corresponding line in project.properties. You can still | |
| // add project-specific configuration in proguard-project.txt. | |
| // | |
| // This configuration file is for custom, stand-alone builds. | |
| // Tell Gradle where to find the ProGuard task. | |
| buildscript { | |
| repositories { | |
| flatDir dirs: '../../lib' | |
| } | |
| dependencies { | |
| classpath ':proguard' | |
| } | |
| } | |
| // Define a ProGuard task. | |
| task proguard(type: proguard.gradle.ProGuardTask) { | |
| // You should probably import a more compact ProGuard-style configuration | |
| // file for all static settings, but we're specifying them all here, for | |
| // the sake of the example. | |
| //configuration 'configuration.pro' | |
| // Specify the input jars, output jars, and library jars. | |
| // Note that ProGuard works with Java bytecode (.class), | |
| // before the dex compiler converts it into Dalvik code (.dex). | |
| injars 'bin/classes' | |
| injars 'libs' | |
| outjars 'bin/classes-processed.jar' | |
| libraryjars '/usr/local/android-sdk/platforms/android-9/android.jar' | |
| //libraryjars '/usr/local/android-sdk/add-ons/google_apis-7_r01/libs/maps.jar' | |
| // ... | |
| // Save the obfuscation mapping to a file, so you can de-obfuscate any stack | |
| // traces later on. | |
| printmapping 'bin/classes-processed.map' | |
| // You can print out the seeds that are matching the keep options below. | |
| //printseeds 'bin/classes-processed.seeds' | |
| // Preverification is irrelevant for the dex compiler and the Dalvik VM. | |
| dontpreverify | |
| // Reduce the size of the output some more. | |
| repackageclasses '' | |
| allowaccessmodification | |
| // Switch off some optimizations that trip older versions of the Dalvik VM. | |
| optimizations '!code/simplification/arithmetic' | |
| // Keep a fixed source file attribute and all line number tables to get line | |
| // numbers in the stack traces. | |
| // You can comment this out if you're not interested in stack traces. | |
| renamesourcefileattribute 'SourceFile' | |
| keepattributes 'SourceFile,LineNumberTable' | |
| // RemoteViews might need annotations. | |
| keepattributes '*Annotation*' | |
| // Preserve all fundamental application classes. | |
| keep 'public class * extends android.app.Activity' | |
| keep 'public class * extends android.app.Application' | |
| keep 'public class * extends android.app.Service' | |
| keep 'public class * extends android.content.BroadcastReceiver' | |
| keep 'public class * extends android.content.ContentProvider' | |
| // Preserve all View implementations, their special context constructors, and | |
| // their setters. | |
| keep 'public class * extends android.view.View { \ | |
| public <init>(android.content.Context); \ | |
| public <init>(android.content.Context, android.util.AttributeSet); \ | |
| public <init>(android.content.Context, android.util.AttributeSet, int); \ | |
| public void set*(...); \ | |
| }' | |
| // Preserve all classes that have special context constructors, and the | |
| // constructors themselves. | |
| keepclasseswithmembers 'class * { \ | |
| public <init>(android.content.Context, android.util.AttributeSet); \ | |
| }' | |
| // Preserve all classes that have special context constructors, and the | |
| // constructors themselves. | |
| keepclasseswithmembers 'class * { \ | |
| public <init>(android.content.Context, android.util.AttributeSet, int); \ | |
| }' | |
| // Preserve all possible onClick handlers. | |
| keepclassmembers 'class * extends android.content.Context { \ | |
| public void *(android.view.View); \ | |
| public void *(android.view.MenuItem); \ | |
| }' | |
| // Preserve the special fields of all Parcelable implementations. | |
| keepclassmembers 'class * implements android.os.Parcelable { \ | |
| static android.os.Parcelable$Creator CREATOR; \ | |
| }' | |
| // Preserve static fields of inner classes of R classes that might be accessed | |
| // through introspection. | |
| keepclassmembers 'class **.R$* { \ | |
| public static <fields>; \ | |
| }' | |
| // Preserve annotated Javascript interface methods. | |
| keepclassmembers 'class * { \ | |
| @android.webkit.JavascriptInterface <methods>; \ | |
| }' | |
| // Preserve the required interface from the License Verification Library | |
| // (but don't nag the developer if the library is not used at all). | |
| keep 'public interface com.android.vending.licensing.ILicensingService' | |
| dontnote 'com.android.vending.licensing.ILicensingService' | |
| // The Android Compatibility library references some classes that may not be | |
| // present in all versions of the API, but we know that's ok. | |
| dontwarn 'android.support.**' | |
| // Preserve all native method names and the names of their classes. | |
| keepclasseswithmembernames includedescriptorclasses:true, 'class * { \ | |
| native <methods>; \ | |
| }' | |
| // Preserve the special static methods that are required in all enumeration | |
| // classes. | |
| keepclassmembers allowshrinking:true, 'enum * { \ | |
| public static **[] values(); \ | |
| public static ** valueOf(java.lang.String); \ | |
| }' | |
| // Explicitly preserve all serialization members. The Serializable interface | |
| // is only a marker interface, so it wouldn't save them. | |
| // You can comment this out if your application doesn't use serialization. | |
| // If your code contains serializable classes that have to be backward | |
| // compatible, please refer to the manual. | |
| keepclassmembers 'class * implements java.io.Serializable { \ | |
| static final long serialVersionUID; \ | |
| static final java.io.ObjectStreamField[] serialPersistentFields; \ | |
| private void writeObject(java.io.ObjectOutputStream); \ | |
| private void readObject(java.io.ObjectInputStream); \ | |
| java.lang.Object writeReplace(); \ | |
| java.lang.Object readResolve(); \ | |
| }' | |
| // Your application may contain more items that need to be preserved; | |
| // typically classes that are dynamically created using Class.forName: | |
| //keep 'public class mypackage.MyClass' | |
| //keep 'public interface mypackage.MyInterface' | |
| //keep 'public class * implements mypackage.MyInterface' | |
| // If you wish, you can let the optimization step remove Android logging | |
| // calls. | |
| //assumenosideeffects class android.util.Log { | |
| // public static boolean isLoggable(java.lang.String, int); | |
| // public static int v(...); | |
| // public static int i(...); | |
| // public static int w(...); | |
| // public static int d(...); | |
| // public static int e(...); | |
| //} | |
| } |