Back to Bazel

Refcard

third_party/java/proguard/proguard6.2.2/docs/manual/refcard.md

9.1.019.3 KB
Original Source

Usage

| | |------------|----------------------------- | Windows: | proguard options ... | Linux/Mac: | proguard.sh options ...

Typically:

| | |------------|----------------------------- | Windows: | proguard @myconfig.pro | Linux/Mac: | proguard.sh @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 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 | 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. | -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. | -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.

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}

KeepFrom being removed or renamedFrom 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 {: #keepoptionmodifiers}

| | |-----------------------------------------------------------------|--------------------------------------------------------------------------- | 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.