# Dalvik renders preverification unuseful (Would just slightly bloat the file). -dontpreverify # Uncomment to have Proguard list dead code detected during the run - useful for cleaning up the codebase. # -printusage -dontskipnonpubliclibraryclassmembers -verbose -allowaccessmodification # 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.app.backup.BackupAgentHelper -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.preference.Preference -keep public class * extends org.mozilla.gecko.sync.syncadapter.SyncAdapter -keep class org.mozilla.gecko.sync.syncadapter.SyncAdapter # Preserve all native method names and the names of their classes. -keepclasseswithmembernames class * { native ; } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # Preserve enums. (For awful reasons, the runtime accesses them using introspection...) -keepclassmembers enum * { *; } # # Rules from ProGuard's Android example: # http://proguard.sourceforge.net/manual/examples.html#androidapplication # # 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 View implementations, their special context constructors, and # their setters. -keep public class * extends android.view.View { public (android.content.Context); public (android.content.Context, android.util.AttributeSet); public (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 (android.content.Context, android.util.AttributeSet); } # 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 ; } # 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 class * { native ; } # # Mozilla-specific rules # # Merging classes can generate dex warnings about anonymous inner classes. -optimizations !class/merging/horizontal -optimizations !class/merging/vertical # Keep miscellaneous targets. # Keep the annotation. -keep @interface org.mozilla.gecko.mozglue.JNITarget # Keep classes tagged with the annotation. -keep @org.mozilla.gecko.mozglue.JNITarget class * # Keep all members of an annotated class. -keepclassmembers @org.mozilla.gecko.mozglue.JNITarget class * { *; } # Keep annotated members of any class. -keepclassmembers class * { @org.mozilla.gecko.mozglue.JNITarget *; } # Keep classes which contain at least one annotated element. Split over two directives # because, according to the developer of ProGuard, "the option -keepclasseswithmembers # doesn't combine well with the '*' wildcard" (And, indeed, using it causes things to # be deleted that we want to keep.) -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.JNITarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.JNITarget ; } # Keep Robocop targets. TODO: Can omit these from release builds. Also, Bug 916507. # Same formula as above... -keep @interface org.mozilla.gecko.mozglue.RobocopTarget -keep @org.mozilla.gecko.mozglue.RobocopTarget class * -keepclassmembers class * { @org.mozilla.gecko.mozglue.RobocopTarget *; } -keepclassmembers @org.mozilla.gecko.mozglue.RobocopTarget class * { *; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.RobocopTarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.RobocopTarget ; } # Keep WebRTC targets. -keep @interface org.mozilla.gecko.mozglue.WebRTCJNITarget -keep @org.mozilla.gecko.mozglue.WebRTCJNITarget class * -keepclassmembers class * { @org.mozilla.gecko.mozglue.WebRTCJNITarget *; } -keepclassmembers @org.mozilla.gecko.mozglue.WebRTCJNITarget class * { *; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.WebRTCJNITarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.WebRTCJNITarget ; } # Keep generator-targeted entry points. -keep @interface org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI -keep @org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI class * -keepclassmembers class * { @org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI *; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI ; } -keepclasseswithmembers class * { @org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI ; } -keep @interface org.mozilla.gecko.mozglue.generatorannotations.WrapEntireClassForJNI -keep @org.mozilla.gecko.mozglue.generatorannotations.WrapEntireClassForJNI class * -keepclassmembers @org.mozilla.gecko.mozglue.generatorannotations.WrapEntireClassForJNI class * { *; } # Disable obfuscation because it makes exception stack traces more difficult to read. -dontobfuscate # Suppress warnings about missing descriptor classes. #-dontnote **,!ch.boye.**,!org.mozilla.gecko.sync.**