Home | History | Annotate | Download | only in manual
      1 <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
      2 <html>
      3 <head>
      4 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
      5 <meta http-equiv="content-style-type" content="text/css">
      6 <link rel="stylesheet" type="text/css" href="style.css">
      7 <title>Ant Task</title>
      8 </head>
      9 <body>
     10 
     11 <h2>Ant Task</h2>
     12 
     13 <b>ProGuard</b> can be run as a task in the Java-based build tool Ant (version
     14 1.6.0 or higher).
     15 <p>
     16 
     17 Before you can use the <code>proguard</code> task, you have to tell Ant about
     18 this new task. The easiest way is to add the following line to your
     19 <code>build.xml</code> file:
     20 <p>
     21 
     22 <pre>
     23 &lt;taskdef resource="proguard/ant/task.properties"
     24          classpath="/usr/local/java/proguard/lib/proguard.jar" /&gt;
     25 </pre>
     26 <p>
     27 
     28 Please make sure the class path is set correctly for your system.
     29 <p>
     30 
     31 There are three ways to configure the ProGuard task: using an external
     32 configuration file, using embedded ProGuard configuration options, or using
     33 the equivalent XML configuration tags. These three ways can be combined,
     34 depending on practical circumstances and personal preference.
     35 <p>
     36 
     37 <h3>1. An external ProGuard configuration file</h3>
     38 
     39 The simplest way to use the ProGuard task in an Ant build file is to keep your
     40 ProGuard configuration file, and include it from Ant. You can include your
     41 ProGuard configuration file by setting
     42 the <a href="#configuration_attribute"><code>configuration</code></a>
     43 attribute of your
     44 <code>proguard</code> task. Your ant build file will then look like this:
     45 <p>
     46 
     47 <pre>
     48 &lt;taskdef resource="proguard/ant/task.properties"
     49          classpath="/usr/local/java/proguard/lib/proguard.jar" /&gt;
     50 &lt;proguard configuration="myconfigfile.pro"/&gt;
     51 </pre>
     52 <p>
     53 
     54 This is a convenient option if you prefer ProGuard's configuration style over
     55 XML, if you want to keep your build file small, or if you have to share your
     56 configuration with developers who don't use Ant.
     57 <p>
     58 
     59 <h3>2. Embedded ProGuard configuration options</h3>
     60 
     61 Instead of keeping an external ProGuard configuration file, you can also copy
     62 the contents of the file into the nested text of the <code>proguard</code> task
     63 (the PCDATA area). Your Ant build file will then look like this:
     64 <p>
     65 
     66 <pre>
     67 &lt;taskdef resource="proguard/ant/task.properties"
     68          classpath="/usr/local/java/proguard/lib/proguard.jar" /&gt;
     69 &lt;proguard&gt;
     70   -libraryjars ${java.home}/lib/rt.jar
     71   -injars      in.jar
     72   -outjars     out.jar
     73 
     74   -keepclasseswithmembers public class * {
     75       public static void main(java.lang.String[]);
     76   }
     77 &lt;/proguard&gt;
     78 </pre>
     79 <p>
     80 
     81 Some minor syntactical changes are required in order to conform with the XML
     82 standard.
     83 <p>
     84 
     85 Firstly, the <code>#</code> character cannot be used for comments in an XML
     86 file. Comments must be enclosed by an opening <code>&lt;!--</code> and a
     87 closing <code>--&gt;</code>. All occurrences of the <code>#</code> character
     88 can be removed.
     89 <p>
     90 
     91 Secondly, the use of <code>&lt;</code> and <code>&gt;</code> characters would
     92 upset the structure of the XML build file. Environment variables are now
     93 enclosed by an opening <code>${</code> and a closing <code>}</code>. This
     94 syntax also allows you to use Ant properties within the ProGuard
     95 configuration. Other occurrences of <code>&lt;</code> and <code>&gt;</code>
     96 have to be encoded as <code>&amp;lt;</code> and <code>&amp;gt;</code>.
     97 <p>
     98 
     99 <h3>3. XML configuration tags</h3>
    100 
    101 If you really prefer a full-blown XML configuration, you can replace the
    102 ProGuard configuration options by XML configuration tags. The resulting
    103 configuration will be equivalent, but much more verbose and difficult to read,
    104 as XML goes. The remainder of this page presents the supported tags. For a
    105 more extensive discussion of their meaning, please consult the traditional <a
    106 href="usage.html">Usage</a> section. You can find some sample configuration
    107 files in the <code>examples/ant</code> directory of the ProGuard distribution.
    108 <p>
    109 
    110 <a name="proguard">&nbsp;</a>
    111 <h2>Task Attributes and Nested Elements</h2>
    112 
    113 The <code><b>&lt;proguard&gt;</b></code> task and the
    114 <code><b>&lt;proguardconfiguration&gt;</b></code> task can have the following
    115 attributes (only for <code>&lt;proguard&gt;</code>) and nested
    116 elements:
    117 
    118 <dl>
    119 
    120 <dt><a name="configuration_attribute"><code><b>configuration</b></code></a>
    121     = "<i>filename</i>"</dt>
    122 <dd>Read and merge options from the given ProGuard-style configuration
    123     file. Note: for reading XML-style configurations, use the <a
    124     href="#configuration_element"><code>configuration</code></a>
    125     <i>element</i>.</dd>
    126 
    127 <dt><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>skipnonpubliclibraryclasses</b></code></a>
    128     = "<i>boolean</i>"
    129     (default = true)</dt>
    130 <dd>Ignore non-public library classes.</dd>
    131 
    132 <dt><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>skipnonpubliclibraryclassmembers</b></code></a>
    133     = "<i>boolean</i>"
    134     (default = true)</dt>
    135 <dd>Ignore package visible library class members.</dd>
    136 
    137 <dt><a href="usage.html#target"><code><b>target</b></code></a>
    138     = "<i>version</i>"
    139     (default = none)</dt>
    140 <dd>Set the given version number in the processed classes.</dd>
    141 
    142 <dt><a href="usage.html#forceprocessing"><code><b>forceprocessing</b></code></a>
    143     = "<i>boolean</i>"
    144     (default = false)</dt>
    145 <dd>Process the input, even if the output seems up to date.</dd>
    146 
    147 <dt><a href="usage.html#printseeds"><code><b>printseeds</b></code></a>
    148     = "<i>boolean or filename</i>"
    149     (default = false)</dt>
    150 <dd>List classes and class members matched by the various <code>keep</code>
    151     commands, to the standard output or to the given file.</dd>
    152 
    153 <dt><a href="usage.html#dontshrink"><code><b>shrink</b></code></a>
    154     = "<i>boolean</i>"
    155     (default = true)</dt>
    156 <dd>Shrink the input class files.</dd>
    157 
    158 <dt><a href="usage.html#printusage"><code><b>printusage</b></code></a>
    159     = "<i>boolean or filename</i>"
    160     (default = false)</dt>
    161 <dd>List dead code of the input class files, to the standard output or to the
    162     given file.</dd>
    163 
    164 <dt><a href="usage.html#dontoptimize"><code><b>optimize</b></code></a>
    165     = "<i>boolean</i>"
    166     (default = true)</dt>
    167 <dd>Optimize the input class files.</dd>
    168 
    169 <dt><a href="usage.html#optimizationpasses"><code><b>optimizationpasses</b></code></a>
    170     = "<i>n</i>"
    171     (default = 1)</dt>
    172 <dd>The number of optimization passes to be performed.</dd>
    173 
    174 <dt><a href="usage.html#allowaccessmodification"><code><b>allowaccessmodification</b></code></a>
    175     = "<i>boolean</i>"
    176     (default = false)</dt>
    177 <dd>Allow the access modifiers of classes and class members to be modified,
    178     while optimizing.</dd>
    179 
    180 <dt><a href="usage.html#mergeinterfacesaggressively"><code><b>mergeinterfacesaggressively</b></code></a>
    181     = "<i>boolean</i>"
    182     (default = false)</dt>
    183 <dd>Allow any interfaces to be merged, while optimizing.</dd>
    184 
    185 <dt><a href="usage.html#dontobfuscate"><code><b>obfuscate</b></code></a>
    186     = "<i>boolean</i>"
    187    (default = true)</dt>
    188 <dd>Obfuscate the input class files.</dd>
    189 
    190 <dt><a href="usage.html#printmapping"><code><b>printmapping</b></code></a>
    191     = "<i>boolean or filename</i>"
    192     (default = false)</dt>
    193 <dd>Print the mapping from old names to new names for classes and class members
    194     that have been renamed, to the standard output or to the given file.</dd>
    195 
    196 <dt><a href="usage.html#applymapping"><code><b>applymapping</b></code></a>
    197     = "<i>filename</i>"
    198     (default = none)</dt>
    199 <dd>Reuse the given mapping, for incremental obfuscation.</dd>
    200 
    201 <dt><a href="usage.html#obfuscationdictionary"><code><b>obfuscationdictionary</b></code></a>
    202     = "<i>filename</i>"
    203     (default = none)</dt>
    204 <dd>Use the words in the given text file as obfuscated field names and method
    205     names.</dd>
    206 
    207 <dt><a href="usage.html#classobfuscationdictionary"><code><b>classobfuscationdictionary</b></code></a>
    208     = "<i>filename</i>"
    209     (default = none)</dt>
    210 <dd>Use the words in the given text file as obfuscated class names.</dd>
    211 
    212 <dt><a href="usage.html#packageobfuscationdictionary"><code><b>packageobfuscationdictionary</b></code></a>
    213     = "<i>filename</i>"
    214     (default = none)</dt>
    215 <dd>Use the words in the given text file as obfuscated package names.</dd>
    216 
    217 <dt><a href="usage.html#overloadaggressively"><code><b>overloadaggressively</b></code></a>
    218     = "<i>boolean</i>"
    219     (default = false)</dt>
    220 <dd>Apply aggressive overloading while obfuscating.</dd>
    221 
    222 <dt><a href="usage.html#useuniqueclassmembernames"><code><b>useuniqueclassmembernames</b></code></a>
    223     = "<i>boolean</i>"
    224     (default = false)</dt>
    225 <dd>Ensure uniform obfuscated class member names for subsequent incremental
    226     obfuscation.</dd>
    227 
    228 <dt><a href="usage.html#dontusemixedcaseclassnames"><code><b>usemixedcaseclassnames</b></code></a>
    229     = "<i>boolean</i>"
    230     (default = true)</dt>
    231 <dd>Generate mixed-case class names while obfuscating.</dd>
    232 
    233 <dt><a href="usage.html#flattenpackagehierarchy"><code><b>flattenpackagehierarchy</b></code></a>
    234     = "<i>package_name</i>"
    235     (default = none)</dt>
    236 <dd>Repackage all packages that are renamed into the single given parent
    237     package.</dd>
    238 
    239 <dt><a href="usage.html#repackageclasses"><code><b>repackageclasses</b></code></a>
    240     = "<i>package_name</i>"
    241     (default = none)</dt>
    242 <dd>Repackage all class files that are renamed into the single given
    243     package.</dd>
    244 
    245 <dt><a href="usage.html#renamesourcefileattribute"><code><b>renamesourcefileattribute</b></code></a>
    246     = "<i>string</i>"
    247     (default = none)</dt>
    248 <dd>Put the given constant string in the <code>SourceFile</code>
    249     attributes.</dd>
    250 
    251 <dt><a href="usage.html#dontpreverify"><code><b>preverify</b></code></a>
    252     = "<i>boolean</i>"
    253     (default = true)</dt>
    254 <dd>Preverify the processed class files if they are targeted at Java Micro
    255     Edition or at Java 6 or higher.</dd>
    256 
    257 <dt><a href="usage.html#microedition"><code><b>microedition</b></code></a>
    258     = "<i>boolean</i>"
    259     (default = false)</dt>
    260 <dd>Targets the processed class files at Java Micro Edition.</dd>
    261 
    262 <dt><a href="usage.html#verbose"><code><b>verbose</b></code></a>
    263     = "<i>boolean</i>"
    264     (default = false)</dt>
    265 <dd>Write out some more information during processing.</dd>
    266 
    267 <dt><a href="usage.html#dontnote"><code><b>note</b></code></a>
    268     = "<i>boolean</i>"
    269    (default = true)</dt>
    270 <dd>Print notes about potential mistakes or omissions in the configuration.
    271     Use the nested element <a href="#dontnote">dontnote</a> for more
    272     fine-grained control.</dd>
    273 
    274 <dt><a href="usage.html#dontwarn"><code><b>warn</b></code></a>
    275     = "<i>boolean</i>"
    276     (default = true)</dt>
    277 <dd>Print warnings about unresolved references. Use the nested
    278     element <a href="#dontwarn">dontwarn</a> for more fine-grained
    279     control. <i>Only use this option if you know what you're doing!</i></dd>
    280 
    281 <dt><a href="usage.html#ignorewarnings"><code><b>ignorewarnings</b></code></a>
    282     = "<i>boolean</i>"
    283     (default = false)</dt>
    284 <dd>Print warnings about unresolved references, but continue processing
    285     anyhow. <i>Only use this option if you know what you're doing!</i></dd>
    286 
    287 <dt><a href="usage.html#printconfiguration"><code><b>printconfiguration</b></code></a>
    288     = "<i>boolean or filename</i>"
    289     (default = false)</dt>
    290 <dd>Write out the entire configuration in traditional ProGuard style, to the
    291     standard output or to the given file. Useful to replace unreadable
    292     XML configurations.</dd>
    293 
    294 <dt><a href="usage.html#dump"><code><b>dump</b></code></a>
    295     = "<i>boolean or filename</i>"
    296     (default = false)</dt>
    297 <dd>Write out the internal structure of the processed class files, to the
    298     standard output or to the given file.</dd>
    299 
    300 <dt><a href="usage.html#injars"><code><b>&lt;injar</b></code></a>
    301     <a href="#classpath"><i>class_path</i></a>
    302     <code><b>/&gt;</b></code></dt>
    303 <dd>Specifies the program jars (or wars, ears, zips, or directories).</dd>
    304 
    305 <dt><a href="usage.html#outjars"><code><b>&lt;outjar</b></code></a>
    306     <a href="#classpath"><i>class_path</i></a>
    307     <code><b>/&gt;</b></code></dt>
    308 <dd>Specifies the name of the output jars (or wars, ears, zips, or
    309     directories).</dd>
    310 
    311 <dt><a href="usage.html#libraryjars"><code><b>&lt;libraryjar</b></code></a>
    312     <a href="#classpath"><i>class_path</i></a>
    313     <code><b>/&gt;</b></code></dt>
    314 <dd>Specifies the library jars (or wars, ears, zips, or directories).</dd>
    315 
    316 <dt><a href="usage.html#keepdirectories"><code><b>&lt;keepdirectory name = </b></code></a>"<i>directory_name</i>"
    317     <code><b>/&gt;</b></code><br/>
    318     <a href="usage.html#keepdirectories"><code><b>&lt;keepdirectories filter = </b></code></a>"<a href="usage.html#filefilters"><i>directory_filter</i></a>"
    319     <code><b>/&gt;</b></code></dt>
    320 <dd>Keep the specified directories in the output jars (or wars, ears, zips, or
    321     directories).</dd>
    322 
    323 <dt><a href="usage.html#keep"><code><b>&lt;keep</b></code></a>
    324     <a href="#keepmodifier"><i>modifiers</i></a>
    325     <a href="#classspecification"><i>class_specification</i></a>
    326     <code><b>&gt;</b></code>
    327     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    328     <code><b>&lt;/keep&gt;</b></code></dt>
    329 <dd>Preserve the specified classes <i>and</i> class members.</dd>
    330 
    331 <dt><a href="usage.html#keepclassmembers"><code><b>&lt;keepclassmembers</b></code></a>
    332     <a href="#keepmodifier"><i>modifiers</i></a>
    333     <a href="#classspecification"><i>class_specification</i></a>
    334     <code><b>&gt;</b></code>
    335     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    336     <code><b>&lt;/keepclassmembers&gt;</b></code></dt>
    337 <dd>Preserve the specified class members, if their classes are preserved as
    338     well.</dd>
    339 
    340 <dt><a href="usage.html#keepclasseswithmembers"><code><b>&lt;keepclasseswithmembers</b></code></a>
    341     <a href="#keepmodifier"><i>modifiers</i></a>
    342     <a href="#classspecification"><i>class_specification</i></a>
    343     <code><b>&gt;</b></code>
    344     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    345     <code><b>&lt;/keepclasseswithmembers&gt;</b></code></dt>
    346 <dd>Preserve the specified classes <i>and</i> class members, if all of the
    347     specified class members are present.</dd>
    348 
    349 <dt><a href="usage.html#keepnames"><code><b>&lt;keepnames</b></code></a>
    350     <a href="#classspecification"><i>class_specification</i></a>
    351     <code><b>&gt;</b></code>
    352     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    353     <code><b>&lt;/keepnames&gt;</b></code></dt>
    354 <dd>Preserve the names of the specified classes <i>and</i> class members (if
    355     they aren't removed in the shrinking step).</dd>
    356 
    357 <dt><a href="usage.html#keepclassmembernames"><code><b>&lt;keepclassmembernames</b></code></a>
    358     <a href="#classspecification"><i>class_specification</i></a>
    359     <code><b>&gt;</b></code>
    360     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    361     <code><b>&lt;/keepclassmembernames&gt;</b></code></dt>
    362 <dd>Preserve the names of the specified class members (if they aren't removed
    363     in the shrinking step).</dd>
    364 
    365 <dt><a href="usage.html#keepclasseswithmembernames"><code><b>&lt;keepclasseswithmembernames</b></code></a>
    366     <a href="#classspecification"><i>class_specification</i></a>
    367     <code><b>&gt;</b></code>
    368     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    369     <code><b>&lt;/keepclasseswithmembernames&gt;</b></code></dt>
    370 <dd>Preserve the names of the specified classes <i>and</i> class members, if
    371     all of the specified class members are present (after the shrinking
    372     step).</dd>
    373 
    374 <dt><a href="usage.html#whyareyoukeeping"><code><b>&lt;whyareyoukeeping</b></code></a>
    375     <a href="#classspecification"><i>class_specification</i></a>
    376     <code><b>&gt;</b></code>
    377     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    378     <code><b>&lt;/whyareyoukeeping&gt;</b></code></dt>
    379 <dd>Print details on why the given classes and class members are being kept in
    380     the shrinking step.</dd>
    381 
    382 <dt><a href="usage.html#assumenosideeffects"><code><b>&lt;assumenosideeffects</b></code></a>
    383     <a href="#classspecification"><i>class_specification</i></a>
    384     <code><b>&gt;</b></code>
    385     <a href="#classmemberspecification"><i>class_member_specifications</i></a>
    386     <code><b>&lt;/assumenosideeffects&gt;</b></code></dt>
    387 <dd>Assume that the specified methods don't have any side effects, while
    388     optimizing. <i>Only use this option if you know what you're
    389     doing!</i></dd>
    390 
    391 <dt><a href="usage.html#optimizations"><code><b>&lt;optimization name = </b></code></a>"<a href="optimizations.html"><i>optimization_name</i></a>"
    392     <code><b>/&gt;</b></code><br/>
    393     <a href="usage.html#optimizations"><code><b>&lt;optimizations filter = </b></code></a>""<a href="optimizations.html"><i>optimization_filter</i></a>"
    394     <code><b>/&gt;</b></code></dt>
    395 <dd>Perform only the specified optimizations.</dd>
    396 
    397 <dt><a href="usage.html#keeppackagenames"><code><b>&lt;keeppackagename name = </b></code></a>"<i>package_name</i>"
    398     <code><b>/&gt;</b></code><br/>
    399     <a href="usage.html#keeppackagenames"><code><b>&lt;keeppackagenames filter = </b></code></a>"<a href="usage.html#filters"><i>package_filter</i></a>"
    400     <code><b>/&gt;</b></code></dt>
    401 <dd>Keep the specified package names from being obfuscated. If no name is
    402     given, all package names are preserved.</dd>
    403 
    404 <dt><a href="usage.html#keepattributes"><code><b>&lt;keepattribute name = </b></code></a>"<i>attribute_name</i>"
    405     <code><b>/&gt;</b></code><br/>
    406     <a href="usage.html#keepattributes"><code><b>&lt;keepattributes filter = </b></code></a>"<a href="usage.html#filters"><i>attribute_filter</i></a>"
    407     <code><b>/&gt;</b></code></dt>
    408 <dd>Preserve the specified optional Java bytecode attributes, with optional
    409     wildcards. If no name is given, all attributes are preserved.</dd>
    410 
    411 <dt><a href="usage.html#adaptclassstrings"><code><b>&lt;adaptclassstrings filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
    412     <code><b>/&gt;</b></code></dt>
    413 <dd>Adapt string constants in the specified classes, based on the obfuscated
    414     names of any corresponding classes.</dd>
    415 
    416 <dt><a href="usage.html#adaptresourcefilenames"><code><b>&lt;adaptresourcefilenames filter = </b></code></a>"<a href="usage.html#filefilters"><i>file_filter</i></a>"
    417     <code><b>/&gt;</b></code></dt>
    418 <dd>Rename the specified resource files, based on the obfuscated names of the
    419     corresponding class files.</dd>
    420 
    421 <dt><a href="usage.html#adaptresourcefilecontents"><code><b>&lt;adaptresourcefilecontents filter = </b></code></a>"<a href="usage.html#filefilters"><i>file_filter</i></a>"
    422     <code><b>/&gt;</b></code></dt>
    423 <dd>Update the contents of the specified resource files, based on the
    424     obfuscated names of the processed classes.</dd>
    425 
    426 <dt><a name="dontnote" />
    427     <a href="usage.html#dontnote"><code><b>&lt;dontnote filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
    428     <code><b>/&gt;</b></code></dt>
    429 <dd>Don't print notes about classes matching the specified class name
    430     filter.</dd>
    431 
    432 <dt><a name="dontwarn" />
    433     <a href="usage.html#dontwarn"><code><b>&lt;dontwarn filter = </b></code></a>"<a href="usage.html#filters"><i>class_filter</i></a>"
    434     <code><b>/&gt;</b></code></dt>
    435 <dd>Don't print warnings about classes matching the specified class name
    436     filter. <i>Only use this option if you know what you're doing!</i></dd>
    437 
    438 <dt><a name="configuration_element"><code><b>&lt;configuration refid = </b></code></a>"<i>ref_id</i>"
    439     <code><b>/&gt;</b></code></dt>
    440 <dd>Includes the configuration specified in the
    441     <code>&lt;proguardconfiguration&gt;</code> task (or
    442     <code>&lt;proguard&gt;</code> task) with the attribute <code>id</code> =
    443     "<i>ref_id</i>". Note that only the nested elements of this configuration
    444     are considered, not the attributes. Also note: for reading ProGuard-style
    445     configuration files, use the <a
    446     href="#configuration_attribute"><code>configuration</code></a>
    447     <i>attribute</i>.</dd>
    448 
    449 </dl>
    450 
    451 <a name="classpath">&nbsp;</a>
    452 <h2>Class Path Attributes and Nested Elements</h2>
    453 
    454 The jar tags are path tags, so they can have any of the path attributes (or
    455 nested elements). The most common attributes are:
    456 
    457 <dl>
    458 
    459 <dt><code><b>path</b></code> = "<i>path</i>"</dt>
    460 <dd>The names of the jars (or wars, ears, zips, or directories), separated by
    461     the path separator.</dd>
    462 
    463 <dt><code><b>location</b></code> = "<i>name</i>" (or <code><b>file</b></code>
    464     = "<i>name</i>", or <code><b>dir</b></code> = "<i>name</i>", or
    465     <code><b>name</b></code> = "<i>name</i>")</dt>
    466 <dd>Alternatively, the name of a single jar (or war, ear, zip, or
    467     directory).</dd>
    468 
    469 <dt><code><b>refid</b></code> = "<i>ref_id</i>"</dt>
    470 <dd>Alternatively, a reference to the path or file set with the attribute
    471     <code>id</code> = "<i>ref_id</i>".</dd>
    472 
    473 </dl>
    474 
    475 In addition, the jar tags can have ProGuard-style filter attributes:
    476 
    477 <dl>
    478 
    479 <dt><code><b>filter</b></code> =
    480     "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
    481 <dd>An optional filter for all class file names and resource file names that
    482     are encountered.</dd>
    483 
    484 <dt><code><b>jarfilter</b></code> =
    485     "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
    486 <dd>An optional filter for all jar names that are encountered.</dd>
    487 
    488 <dt><code><b>warfilter</b></code> =
    489     "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
    490 <dd>An optional filter for all war names that are encountered.</dd>
    491 
    492 <dt><code><b>earfilter</b></code> =
    493     "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
    494 <dd>An optional filter for all ear names that are encountered.</dd>
    495 
    496 <dt><code><b>zipfilter</b></code> =
    497     "<a href="usage.html#filefilters"><i>file_filter</i></a>"</dt>
    498 <dd>An optional filter for all zip names that are encountered.</dd>
    499 
    500 </dl>
    501 
    502 <a name="keepmodifier">&nbsp;</a>
    503 <h2>Keep Modifier Attributes</h2>
    504 
    505 The keep tags can have the following <i>modifier</i> attributes:
    506 
    507 <dl>
    508 
    509 <dt><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a>
    510     = "<i>boolean</i>"
    511     (default = false)</dt>
    512 <dd>Specifies whether the entry points specified in the keep tag may be
    513     shrunk.</dd>
    514 
    515 <dt><a href="usage.html#allowoptimization"><code><b>allowoptimization</b></code></a>
    516     = "<i>boolean</i>"
    517     (default = false)</dt>
    518 <dd>Specifies whether the entry points specified in the keep tag may be
    519     optimized.</dd>
    520 
    521 <dt><a href="usage.html#allowobfuscation"><code><b>allowobfuscation</b></code></a>
    522     = "<i>boolean</i>"
    523     (default = false)</dt>
    524 <dd>Specifies whether the entry points specified in the keep tag may be
    525     obfuscated.</dd>
    526 
    527 </dl>
    528 
    529 <a name="classspecification">&nbsp;</a>
    530 <h2>Class Specification Attributes and Nested Elements</h2>
    531 
    532 The keep tags can have the following <i>class_specification</i> attributes and
    533 <i>class_member_specifications</i> nested elements:
    534 
    535 <dl>
    536 
    537 <dt><code><b>access</b></code> = "<i>access_modifiers</i>"</dt>
    538 <dd>The optional access modifiers of the class. Any space-separated list of
    539     "public", "final", and "abstract", with optional negators "!".</dd>
    540 
    541 <dt><code><b>type</b></code> = "<i>type</i>"</dt>
    542 <dd>The optional type of the class: one of "class", "interface", or
    543     "!interface".</dd>
    544 
    545 <dt><code><b>name</b></code> = "<i>class_name</i>"</dt>
    546 <dd>The optional fully qualified name of the class, with optional
    547     wildcards.</dd>
    548 
    549 <dt><code><b>extends</b></code> = "<i>class_name</i>"</dt>
    550 <dd>The optional fully qualified name of the class the specified classes
    551     must extend, with optional wildcards.</dd>
    552 
    553 <dt><code><b>implements</b></code> = "<i>class_name</i>"</dt>
    554 <dd>The optional fully qualified name of the class the specified classes
    555     must implement, with optional wildcards.</dd>
    556 
    557 <dt><code><b>&lt;field</b></code>
    558     <a href="#classmemberspecification"><i>class_member_specification</i></a>
    559     <code><b>/&gt;</b></code></dt>
    560 <dd>Specifies a field.</dd>
    561 
    562 <dt><code><b>&lt;method</b></code>
    563     <a href="#classmemberspecification"><i>class_member_specification</i></a>
    564     <code><b>/&gt;</b></code></dt>
    565 <dd>Specifies a method.</dd>
    566 
    567 <dt><code><b>&lt;constructor</b></code>
    568     <a href="#classmemberspecification"><i>class_member_specification</i></a>
    569     <code><b>/&gt;</b></code></dt>
    570 <dd>Specifies a constructor.</dd>
    571 
    572 </dl>
    573 
    574 <a name="classmemberspecification">&nbsp;</a>
    575 <h2>Class Member Specification Attributes</h2>
    576 
    577 The class member tags can have the following <i>class_member_specification</i>
    578 attributes:
    579 
    580 <dl>
    581 
    582 <dt><code><b>access</b></code> = "<i>access_modifiers</i>"</dt>
    583 <dd>The optional access modifiers of the class. Any space-separated list of
    584     "public", "protected", "private", "static", etc., with optional negators
    585     "!".</dd>
    586 
    587 <dt><code><b>type</b></code> = "<i>type</i>"</dt>
    588 <dd>The optional fully qualified type of the class member, with optional
    589     wildcards. Not applicable for constructors, but required for methods for
    590     which the <code>parameters</code> attribute is specified.</dd>
    591 
    592 <dt><code><b>name</b></code> = "<i>name</i>"</dt>
    593 <dd>The optional name of the class member, with optional wildcards. Not
    594     applicable for constructors.</dd>
    595 
    596 <dt><code><b>parameters</b></code> = "<i>parameters</i>"</dt>
    597 <dd>The optional comma-separated list of fully qualified method parameters,
    598     with optional wildcards. Not applicable for fields, but required for
    599     constructors, and for methods for which the <code>type</code> attribute is
    600     specified.</dd>
    601 
    602 </dl>
    603 
    604 <hr>
    605 <address>
    606 Copyright &copy; 2002-2009
    607 <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
    608 </address>
    609 </body>
    610 </html>
    611