# Proguard step for stripping debug information.
#
# This is useful to work around a bug in the way Proguard handles debug information: it
# sometimes corrupts it. Classes with corrupt debug information cannot be dexed, but
# classes with *no* debug information can be. There's no way to configure Proguard to
# delete debug information on a per-class basis, so we need this special extra step for
# stripping debug information only from those classes for which the Proguard bug is
# encountered.
#
# Currently, this pass is applied to all bundled library jars for which we are not
# compiling the source. This is slightly more than is strictly necessary to work around
# the Proguard bug, but such debug information is of negligible value and stripping it
# too slightly simplifies the makefile and saves us a handful of kilobytes of binary size.
#
# Configuring Proguard to do nothing except strip metadata is done by having it run only
# the obfuscation pass, but with a configuration that prevents it from renaming any classes.
# It then attempts to delete class metadata, so we further configure it not to do so for
# anything except the problematic debug information.

# Run only the obfuscator.
-dontoptimize
-dontshrink
-dontpreverify
-verbose

# Don't rename anything.
-keeppackagenames

# Seriously, don't rename anything.
-keep class *
-keepclassmembers class * {
    *;
}

# Don't delete other useful metadata.
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,*Annotation*,EnclosingMethod

# 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.**
-dontwarn android.support.**
