# 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 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); } # Keep setters in Views so that animations can still work. # See http://proguard.sourceforge.net/manual/examples.html#beans # From tools/proguard/proguard-android.txt. -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # Keep setters in support Fragment so that Robocop tests work, # specifically testBrowserSearchVisibility. -keepclassmembers public class * extends android.support.v4.app.Fragment { void set*(***); *** get*(); } # 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 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 class **.R$* # 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" -include "leakcanary-keeps.cfg" -include "appcompat-v7-keeps.cfg" -include "proguard-android.cfg" -include "../../geckoview/proguard-rules.txt"