-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
-dontwarn android.support.**

-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
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

# Keep our own classes to keep stack traces readable. 
-keep class org.dmfs.** {*;}

# Allow obfuscation of android.support.v7.internal.view.menu.**
# to avoid problem on Samsung 4.2.2 devices with appcompat v21
# see https://code.google.com/p/android/issues/detail?id=78377
-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}

# this is required to keep the Annotations for retention-magic and to keep the line numbers n stack traces
-keepattributes *Annotation*,SourceFile,LineNumberTable

# keep relevant members in Activities
-keepclassmembers class * extends android.app.Activity 
{
    # optional, keep TAG fields if you use them for automatic namespacing
    # you don't need this line if don't use the "permanent" feature or
    # if you set the namespace like so:
    # @Retain(permanent = true, classNS = TAG)
    # or
    # @Retain(permanent = true, classNS = "someNameSpace")
    java.lang.String TAG;

    # optional, keep names of retained fields
    # you don't need this line if don't use the "permanent" feature or
    # if you set the key manually like in @Retain(key = "someKey");
    @org.dmfs.android.retentionmagic.annotations.* <fields>;

    private long mId;
}

# same for Fragments
-keepclassmembers class * extends android.app.Fragment 
{
    java.lang.String TAG;
    @org.dmfs.android.retentionmagic.annotations.* <fields>;
    private long mId;
}

# same for support library Fragments
-keepclassmembers class * extends android.support.v4.app.Fragment 
{
    java.lang.String TAG;
    @org.dmfs.android.retentionmagic.annotations.* <fields>;
    private long mId;
}