Products
Products
Open-source Technology
Solutions
Resources
Company
OS | Command |
---|---|
Windows: | proguard options ... |
Linux/Mac: | proguard.sh options ... |
Typically:
OS | Command |
---|---|
Windows: | proguard @myconfig.pro |
Linux/Mac: | proguard.sh @myconfig.pro |
Option | Meaning |
---|---|
@ 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 apks, aabs, aars, wars, ears, jmods, zips, or directories). |
-outjars class_path | Specifies the names of the output jars (or apks, aabs, aars, wars, ears, jmods, zips, or directories). |
-libraryjars class_path | Specifies the library jars (or apks, aabs, aars, wars, ears, jmods, 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). |
-target version | deprecated 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). |
-if class_specification | Specify classes and class members that must be present to activate the subsequent keep option. |
-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. |
-assumenoexternalsideeffects class_specification | Assume that the specified methods don't have any external side effects, while optimizing. |
-assumenoescapingparameters class_specification | Assume that the specified methods don't let any reference parameters escape to the heap, while optimizing. |
-assumenoexternalreturnvalues class_specification | Assume that the specified methods don't return any external reference values, while optimizing. |
-assumevalues class_specification | Assume fixed values or ranges of values for primitive fields and methods, 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* . |
-keepparameternames | Keep the parameter names and types of methods that are kept. |
-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. |
-keepkotlinmetadata deprecated | Keep and adapt Kotlin metadata. |
-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. |
-android | Target the processed class files at Android. |
-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. |
-addconfigurationdebugging | Instrument the processed code with debugging statements that print out suggestions for missing ProGuard configuration. |
-optimizeaggressively | Enables more aggressive assumptions during optimization |
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 |
The ProGuard Playground is a useful tool to help you further tweak the keep rules.
Modifier | Meaning |
---|---|
includedescriptorclasses | Also keep any classes in the descriptors of specified fields and methods. |
includecode | Also keep the code of the specified methods unchanged. |
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|enum classname
[extends|implements [@annotationtype] classname]
[{
[@annotationtype]
[[!]public|private|protected|static|volatile|transient ...]
<fields> | (fieldtype fieldname [= values]);
[@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, '...
' for any number of arguments, and '<n>
' for the n'th matched wildcard in the same option.?
' for a single character and '*
' for any number of characters.