# 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 -keep public class * extends android.support.v4.app.Fragment # 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 # # 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 # This optimisation causes corrupt bytecode if we run more than two passes. # Testing shows that running the extra passes of everything else saves us # more than this optimisation does, so bye bye! -optimizations !code/allocation/variable # Keep miscellaneous targets. # Keep the annotation. -keep @interface org.mozilla.gecko.annotation.JNITarget # Keep classes tagged with the annotation. -keep @org.mozilla.gecko.annotation.JNITarget class * # Keep all members of an annotated class. -keepclassmembers @org.mozilla.gecko.annotation.JNITarget class * { *; } # Keep annotated members of any class. -keepclassmembers class * { @org.mozilla.gecko.annotation.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.annotation.JNITarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.JNITarget ; } # Keep Robocop targets. TODO: Can omit these from release builds. Also, Bug 916507. # Same formula as above... -keep @interface org.mozilla.gecko.annotation.RobocopTarget -keep @org.mozilla.gecko.annotation.RobocopTarget class * -keepclassmembers class * { @org.mozilla.gecko.annotation.RobocopTarget *; } -keepclassmembers @org.mozilla.gecko.annotation.RobocopTarget class * { *; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.RobocopTarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.RobocopTarget ; } # keep Reflection targets -keep @interface org.mozilla.gecko.annotation.ReflectionTarget -keep @org.mozilla.gecko.annotation.ReflectionTarget class * -keepclassmembers class * { @org.mozilla.gecko.annotation.ReflectionTarget *; } -keepclassmembers @org.mozilla.gecko.annotation.ReflectionTarget class * { *; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.ReflectionTarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.ReflectionTarget ; } # Keep WebRTC targets. -keep @interface org.mozilla.gecko.annotation.WebRTCJNITarget -keep @org.mozilla.gecko.annotation.WebRTCJNITarget class * -keepclassmembers class * { @org.mozilla.gecko.annotation.WebRTCJNITarget *; } -keepclassmembers @org.mozilla.gecko.annotation.WebRTCJNITarget class * { *; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.WebRTCJNITarget ; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.WebRTCJNITarget ; } # Keep generator-targeted entry points. -keep @interface org.mozilla.gecko.annotation.WrapForJNI -keep @org.mozilla.gecko.annotation.WrapForJNI class * -keepclassmembers class * { @org.mozilla.gecko.annotation.WrapForJNI *; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.WrapForJNI ; } -keepclasseswithmembers class * { @org.mozilla.gecko.annotation.WrapForJNI ; } # Keep all members of an annotated class. -keepclassmembers @org.mozilla.gecko.annotation.WrapForJNI class * { *; } -keep class **.R$* # Keep classes, and all their contents, compiled before annotation.RobocopTarget. -keep class org.mozilla.gecko.AppConstants { *; } -keep class org.mozilla.gecko.AppConstants$Versions { *; } -keep class org.mozilla.gecko.SysInfo { *; } # Keep all interfaces that might be dynamically required by Java Addons. -keep class org.mozilla.javaaddons.* { *; } -keep class org.mozilla.javaaddons.*$* { *; } # 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.** -include "play-services-keeps.cfg" # Don't print spurious warnings from the support library. # See: http://stackoverflow.com/questions/22441366/note-android-support-v4-text-icucompatics-cant-find-dynamically-referenced-cl -dontnote android.support.** -include "adjust-keeps.cfg"