ProGuard Reference Card

Usage

java -jar proguard.jar options ...

  Typically:

java -jar proguard.jar @myconfig.pro

Options

@filename Short for '-include filename'.
-include filename Read configuration options from the given file.
-basedirectory directoryname Specifies the base directory for subsequent relative file names.
-injars class_path Specifies the program jars (or wars, ears, zips, or directories).
-outjars class_path Specifies the name of the output jars (or wars, ears, zips, or directories).
-libraryjars class_path Specifies the library jars (or wars, ears, zips, or directories).
-dontskipnonpubliclibraryclasses Don't ignore non-public library classes.
-dontskipnonpubliclibraryclassmembers Don't ignore package visible library class members.
-keepdirectories [directory_filter] Keep the specified directories in the output jars (or wars, ears, zips, or directories).
-target version Set the given version number in the processed classes.
-forceprocessing Process the input, even if the output seems up to date.
-keep [,modifier,...] class_specification Preserve the specified classes and class members.
-keepclassmembers [,modifier,...] class_specification Preserve the specified class members, if their classes are preserved as well.
-keepclasseswithmembers [,modifier,...] class_specification Preserve the specified classes and class members, if all of the specified class members are present.
-keepnames class_specification Preserve the names of the specified classes and class members (if they aren't removed in the shrinking step).
-keepclassmembernames class_specification Preserve the names of the specified class members (if they aren't removed in the shrinking step).
-keepclasseswithmembernames class_specification Preserve the names of the specified classes and class members, if all of the specified class members are present (after the shrinking step).
-printseeds [filename] List classes and class members matched by the various -keep options, to the standard output or to the given file.
-dontshrink Don't shrink the input class files.
-printusage [filename] List dead code of the input class files, to the standard output or to the given file.
-whyareyoukeeping class_specification Print details on why the given classes and class members are being kept in the shrinking step.
-dontoptimize Don't optimize the input class files.
-optimizations optimization_filter The optimizations to be enabled and disabled.
-optimizationpasses n The number of optimization passes to be performed.
-assumenosideeffects class_specification Assume that the specified methods don't have any side effects, while optimizing.
-allowaccessmodification Allow the access modifiers of classes and class members to be modified, while optimizing.
-mergeinterfacesaggressively Allow any interfaces to be merged, while optimizing.
-dontobfuscate Don't obfuscate the input class files.
-printmapping [filename] Print the mapping from old names to new names for classes and class members that have been renamed, to the standard output or to the given file.
-applymapping filename Reuse the given mapping, for incremental obfuscation.
-obfuscationdictionary filename Use the words in the given text file as obfuscated field names and method names.
-classobfuscationdictionary filename Use the words in the given text file as obfuscated class names.
-packageobfuscationdictionary filename Use the words in the given text file as obfuscated package names.
-overloadaggressively Apply aggressive overloading while obfuscating.
-useuniqueclassmembernames Ensure uniform obfuscated class member names for subsequent incremental obfuscation.
-dontusemixedcaseclassnames Don't generate mixed-case class names while obfuscating.
-keeppackagenames [package_filter] Keep the specified package names from being obfuscated.
-flattenpackagehierarchy [package_name] Repackage all packages that are renamed into the single given parent package.
-repackageclasses [package_name] Repackage all class files that are renamed into the single given package.
-keepattributes [attribute_filter] Preserve the given optional attributes; typically Exceptions, InnerClasses, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable, LocalVariableTypeTable, Synthetic, EnclosingMethod, and *Annotation*.
-renamesourcefileattribute [string] Put the given constant string in the SourceFile attributes.
-adaptclassstrings [class_filter] Adapt string constants in the specified classes, based on the obfuscated names of any corresponding classes.
-adaptresourcefilenames [file_filter] Rename the specified resource files, based on the obfuscated names of the corresponding class files.
-adaptresourcefilecontents [file_filter] Update the contents of the specified resource files, based on the obfuscated names of the processed classes.
-dontpreverify Don't preverify the processed class files.
-microedition Target the processed class files at Java Micro Edition.
-verbose Write out some more information during processing.
-dontnote [class_filter] Don't print notes about potential mistakes or omissions in the configuration.
-dontwarn [class_filter] Don't warn about unresolved references at all.
-ignorewarnings Print warnings about unresolved references, but continue processing anyhow.
-printconfiguration [filename] Write out the internal structure of the processed class files, to the standard output or to the given file.
-dump [filename] Write out the entire configuration in traditional ProGuard style, to the standard output or to the given file.

Notes:

Overview of Keep Options

Keep From being removed or renamed From being renamed
Classes and class members -keep -keepnames
Class members only -keepclassmembers -keepclassmembernames
Classes and class members, if class members present -keepclasseswithmembers -keepclasseswithmembernames

Keep Option Modifiers

allowshrinking The entry points specified in the keep tag may be shrunk.
allowoptimization The entry points specified in the keep tag may be optimized.
allowobfuscation The entry points specified in the keep tag may be obfuscated.

Class Specifications

[@annotationtype] [[!]public|final|abstract ...] [!]interface|class classname
    [extends|implements [@annotationtype] classname]
[{
    [@annotationtype] [[!]public|private|protected|static|volatile|transient ...] <fields> |
                                                                      (fieldtype fieldname);
    [@annotationtype] [[!]public|private|protected|static|synchronized|native|abstract|strictfp ...] <methods> |
                                                                                           <init>(argumenttype,...) |
                                                                                           classname(argumenttype,...) |
                                                                                           (returntype methodname(argumenttype,...));
    [@annotationtype] [[!]public|private|protected|static ... ] *;
    ...
}]

Notes:


Copyright © 2002-2009 Eric Lafortune.