java -jar proguard.jar options ...
Typically:
java -jar proguard.jar @myconfig.pro
| @filename | Short for ' -includefilename'. | 
| -includefilename | Read configuration options from the given file. | 
| -basedirectorydirectoryname | Specifies the base directory for subsequent relative file names. | 
| -injarsclass_path | Specifies the program jars (or wars, ears, zips, or directories). | 
| -outjarsclass_path | Specifies the names of the output jars (or wars, ears, zips, or directories). | 
| -libraryjarsclass_path | Specifies the library jars (or wars, ears, zips, or directories). | 
| -skipnonpubliclibraryclasses | Ignore non-public library classes. | 
| -dontskipnonpubliclibraryclasses | Don't ignore non-public library classes (the default). | 
| -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). | 
| -targetversion | 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. | 
| -keepnamesclass_specification | Preserve the names of the specified classes and class members (if they aren't removed in the shrinking step). | 
| -keepclassmembernamesclass_specification | Preserve the names of the specified class members (if they aren't removed in the shrinking step). | 
| -keepclasseswithmembernamesclass_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 -keepoptions, 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. | 
| -whyareyoukeepingclass_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. | 
| -optimizationsoptimization_filter | The optimizations to be enabled and disabled. | 
| -optimizationpassesn | The number of optimization passes to be performed. | 
| -assumenosideeffectsclass_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. | 
| -applymappingfilename | Reuse the given mapping, for incremental obfuscation. | 
| -obfuscationdictionaryfilename | Use the words in the given text file as obfuscated field names and method names. | 
| -classobfuscationdictionaryfilename | Use the words in the given text file as obfuscated class names. | 
| -packageobfuscationdictionaryfilename | 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*. | 
| -keepparameternames | Keep the parameter names and types of methods that are kept. | 
| -renamesourcefileattribute[string] | Put the given constant string in the SourceFileattributes. | 
| -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 entire configuration in traditional ProGuard style, to the standard output or to the given file. | 
| -dump[filename] | Write out the internal structure of the processed class files, to the standard output or to the given file. | 
Notes:
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 | 
| includedescriptorclasses | Also keep any classes in the descriptors of specified fields and methods. | allowshrinking | Allow the specified entry points to be removed in the shrinking step. | 
| allowoptimization | Allow the specified entry points to be modified in the optimization step. | 
| allowobfuscation | Allow the specified entry points to be renamed in the obfuscation step. | 
[@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:
?' for a
    single character, '*' for any number of characters
    (but not the package separator), '**' for any number
    of (any) characters, '%' for any primitive type,
    '***' for any type, and '...' for       any number of arguments.?' for a single character and '*'
    for any number of characters.