| <!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
| <html> | |
| <head> | |
| <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | |
| <meta http-equiv="content-style-type" content="text/css"> | |
| <link rel="stylesheet" type="text/css" href="style.css"> | |
| <title>Attributes</title> | |
| </head> | |
| <body> | |
| <script type="text/javascript" language="JavaScript"> | |
| <!-- | |
| if (window.self==window.top) | |
| document.write('<a class="largebutton" target="_top" href="../index.html#manual/attributes.html">ProGuard index</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a> <a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</a> <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a>') | |
| //--> | |
| </script> | |
| <noscript> | |
| <a class="largebutton" target="_top" href="../index.html#manual/attributes.html">ProGuard index</a> | |
| <a class="largebutton" target="_top" href="http://www.guardsquare.com/dexguard">DexGuard</a> | |
| <a class="largebutton" target="_top" href="http://www.guardsquare.com/">GuardSquare</a> | |
| <a class="largebutton" target="other" href="http://sourceforge.net/projects/proguard/">Sourceforge</a> | |
| </noscript> | |
| <h2>Attributes</h2> | |
| Class files essentially define classes, their fields, and their methods. A lot | |
| of essential and non-essential data are attached to these classes, fields, and | |
| methods as <i>attributes</i>. For instance, attributes can contain bytecode, | |
| source file names, line number tables, etc. | |
| <p> | |
| ProGuard's obfuscation step removes attributes that are generally not | |
| necessary for executing the code. With | |
| the <a href="usage.html#keepattributes"><code>-keepattributes</code></a> | |
| option, you can specify a filter for attributes that you do want to keep, for | |
| instance, if your code accesses them through reflection or if you want to | |
| preserve some compilation or debugging information. The filter works like | |
| any <a href="usage.html#filters">filter</a> in ProGuard. | |
| <p> | |
| The following wildcards are supported: | |
| <table cellspacing="10"> | |
| <tr><td valign="top"><code><b>?</b></code></td> | |
| <td>matches any single character in an attribute name.</td></tr> | |
| <tr><td valign="top"><code><b>*</b></code></td> | |
| <td>matches any part of an attribute name.</td></tr> | |
| </table> | |
| An attribute name that is preceded by an exclamation mark '<b>!</b>' is | |
| <i>excluded</i> from further attempts to match with <i>subsequent</i> | |
| attribute names in the filter. Make sure to specify filters correctly, since | |
| they are not checked for potential typos. | |
| <p> | |
| For example, the following setting preserves the optional attributes that are | |
| typically necessary when processing code that is intended to be used as a | |
| library: | |
| <pre> | |
| -keepattributes Exceptions,InnerClasses,Signature,Deprecated, | |
| SourceFile,LineNumberTable,*Annotation*,EnclosingMethod | |
| </pre> | |
| <p> | |
| The Java bytecode specifications currently specify the following list of | |
| attributes. | |
| <h3>Optional attributes</h3> | |
| ProGuard's obfuscation step by default discards the following optional | |
| attributes. You can keep them with | |
| the <a href="usage.html#keepattributes"><code>-keepattributes</code></a> | |
| option. | |
| <dl> | |
| <dt><code><b>SourceFile</b></code></dt> | |
| <dd>Specifies the name of the source file from which the class file was | |
| compiled. If present, this name is reported in stack traces.</dd> | |
| <dt><div>(J++ extension)</div> | |
| <code><b>SourceDir</b></code></dt> | |
| <dd>Specifies the name of the source directory from which the class file was | |
| compiled.</dd> | |
| <dt><code><b>InnerClasses</b></code></dt> | |
| <dd>Specifies the relationship between a class and its inner classes and outer | |
| classes. Other than this and the naming convention with a '$' separator | |
| between the names of inner classes and outer classes, inner classes are | |
| just like ordinary classes. Compilers may need this information to find | |
| classes referenced in a compiled library. Code may access this information | |
| by reflection, for instance to derive the simple name of the class.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>EnclosingMethod</b></code></dt> | |
| <dd>Specifies the method in which the class was defined. Compilers may need | |
| this information to find classes referenced in a compiled library. Code | |
| may access this information by reflection, for instance to derive the | |
| simple name of the class.</dd> | |
| <dt><code><b>Deprecated</b></code></dt> | |
| <dd>Indicates that the class, field, or method is deprecated.</dd> | |
| <dt><code><b>Synthetic</b></code></dt> | |
| <dd>Indicates that the class, field, or method was generated by the | |
| compiler.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>Signature</b></code></dt> | |
| <dd>Specifies the generic signature of the class, field, or method. Compilers | |
| may need this information to properly compile classes that use generic | |
| types from compiled libraries. Code may access this signature by | |
| reflection.</dd> | |
| <dt><div>(Java 8 or higher)</div> | |
| <code><b>MethodParameters</b></code></dt> | |
| <dd>Specifies the names and access flags of the parameters of the method. Code | |
| may access this information by reflection.</dd> | |
| <dt><code><b>Exceptions</b></code></dt> | |
| <dd>Specifies the exceptions that a method may throw. Compilers may use this | |
| information to enforce catching them.</dd> | |
| <dt><code><b>LineNumberTable</b></code></dt> | |
| <dd>Specifies the line numbers of the method. If present, these line numbers | |
| are reported in stack traces.</dd> | |
| <dt><code><b>LocalVariableTable</b></code></dt> | |
| <dd>Specifies the names and types of local variables of the method. If present, | |
| some IDEs may use this information for helping with auto-completion.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>LocalVariableTypeTable</b></code></dt> | |
| <dd>Specifies the names and generic types of local variables of the method. If | |
| present, some IDEs may use this information for helping with | |
| auto-completion.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>RuntimeVisibleAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at run-time, for classes, | |
| fields, and methods. Compilers and annotation processors may use these | |
| annotations. Code may access them by reflection.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>RuntimeInvisibleAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at compile-time, for classes, | |
| fields, and methods. Compilers and annotation processors may use these | |
| annotations.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>RuntimeVisibleParameterAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at run-time, for method | |
| parameters. Compilers and annotation processors may use these | |
| annotations. Code may access them by reflection.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>RuntimeInvisibleParameterAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at compile-time, for method | |
| parameters. Compilers and annotation processors may use these | |
| annotations.</dd> | |
| <dt><div>(Java 8 or higher)</div> | |
| <code><b>RuntimeVisibleTypeAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at run-time, for generic types, | |
| instructions, etc. Compilers and annotation processors may use these | |
| annotations. Code may access them by reflection.</dd> | |
| <dt><div>(Java 8 or higher)</div> | |
| <code><b>RuntimeInvisibleTypeAnnotations</b></code></dt> | |
| <dd>Specifies the annotations that are visible at compile-time, for generic | |
| types, instructions, etc. Compilers and annotation processors may use | |
| these annotations.</dd> | |
| <dt><div>(Java 5 or higher)</div> | |
| <code><b>AnnotationDefault</b></code></dt> | |
| <dd>Specifies a default value for an annotation.</dd> | |
| </dl> | |
| <p> | |
| <h3>Essential attributes</h3> | |
| ProGuard automatically keeps the following essential attributes, processing | |
| them as necessary. We're listing them for the sake of completeness. | |
| <dl> | |
| <dt><code><b>ConstantValue</b></code></dt> | |
| <dd>Specifies a constant integer, float, class, string, etc.</dd> | |
| <dt><code><b>Code</b></code></dt> | |
| <dd>Specifies the actual bytecode of a method.</dd> | |
| <dt><div>(Java Micro Edition)</div> | |
| <code><b>StackMap</b></code></dt> | |
| <dd>Provides preverification information. The Java Virtual Machine can use | |
| this information to speed up the verification step when loading a | |
| class.</dd> | |
| <dt><div>(Java 6 or higher)</div> | |
| <code><b>StackMapTable</b></code></dt> | |
| <dd>Provides preverification information. The Java Virtual Machine can use | |
| this information to speed up the verification step when loading a | |
| class.</dd> | |
| <dt><div>(Java 7 or higher)</div> | |
| <code><b>BootstrapMethods</b></code></dt> | |
| <dd>Specifies the methods to bootstrap dynamic method invocations.</dd> | |
| </dl> | |
| <p> | |
| <hr /> | |
| <address> | |
| Copyright © 2002-2017 | |
| <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a> @ <a target="top" href="http://www.guardsquare.com/">GuardSquare</a>. | |
| </address> | |
| </body> | |
| </html> |