java -jar proguard.jar
options ...
Typically:
java -jar proguard.jar @myconfig.pro
@ 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. |
-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. |
-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. |
-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_name,...] |
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. |
-adaptresourcefilenames
[filter] |
Rename the specified resource files, based on the obfuscated names of the corresponding class files. |
-adaptresourcefilecontents
[filter] |
Update the contents of the specified resource files, based on the obfuscated names of the class files. |
-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 |
Don't print notes about potential mistakes or omissions in the configuration. |
-dontwarn |
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:
Keep
OptionsKeep | 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 |
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. |
[@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.