Search code examples
androidannotationsproguardandroid-annotations

How to use Proguard with Android Annotations?


Does anybody know how to use Proguard with Android Annotations?

I found this resource: https://code.google.com/p/androidannotations/wiki/ProGuard

But when I use the proguard.cfg file from there, I get the following error:

proguard.ParseException: Unknown option '*' in line 6 of file
'/Users/jabdulius/Documents/Dropbox/workspace-tinder/Tinder/proguard.cfg'

Here's the proguard.cfg file I copied from the link:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/ *,!class/merging/ *

-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 *;
}

Solution

  • When you copy and paste from the website, you may notice your paste includes spaces before the asterisks that were not present in the original (a minor formatting error).. simply remove the two spaces, changing the following line:

    -optimizations !code/simplification/arithmetic,!field/ *,!class/merging/ *
    

    to match this:

    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    

    You'll also note, as Eric has said (and he would know best!!) the newer versions of ADT include a default proguard configuration referenced in new project.properties:

    #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
    

    Uncommenting the line (remove the #)will load the default properties (proguard-android.txt) and then override it with any changes you make in your project proguard-project.txt.

    Those default properties include many of the rules that Android Annotations project recommends, and are sufficient for most basic apps.