22 KiB
22 KiB
Usage
OS | Command |
---|---|
Windows: | proguard options ... |
Linux/Mac: | proguard.sh options ... |
Typically:
OS | Command |
---|---|
Windows: | proguard @myconfig.pro |
Linux/Mac: | proguard.sh @myconfig.pro |
Options
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:
- class_path is a list of jars, apks, aabs, aars, wars, ears, jmods, zips, and directories, with optional filters, separated by path separators.
- filename can contain Java system properties delimited by '<' and '>'.
- If filename contains special characters, the entire name should be quoted with single or double quotes.
Overview of Keep
Options {: #keepoverview}
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.
Keep Option Modifiers {: #keepoptionmodifiers}
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. |
Class Specifications {: #classspecification}
[@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:
- Class names must always be fully qualified, i.e. including their package names.
- Types in classname, annotationtype, returntype, and
argumenttype can contain wildcards: '
?
' 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. - fieldname and methodname can contain wildcards as well: '
?
' for a single character and '*
' for any number of characters.