ant.html revision b72c5c2e5482cf10117b2b25f642f7616b2326c3
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
141.6.0 or higher).
15<p>
16
17Before you can use the <code>proguard</code> task, you have to tell Ant about
18this 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
28Please make sure the class path is set correctly for your system.
29<p>
30
31There are three ways to configure the ProGuard task: using an external
32configuration file, using embedded ProGuard configuration options, or using
33the equivalent XML configuration tags. These three ways can be combined,
34depending on practical circumstances and personal preference.
35<p>
36
37<h3>1. An external ProGuard configuration file</h3>
38
39The simplest way to use the ProGuard task in an Ant build file is to keep your
40ProGuard configuration file, and include it from Ant. You can include your
41ProGuard configuration file by setting
42the <a href="#configuration_attribute"><code>configuration</code></a>
43attribute 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
54This is a convenient option if you prefer ProGuard's configuration style over
55XML, if you want to keep your build file small, or if you have to share your
56configuration with developers who don't use Ant.
57<p>
58
59<h3>2. Embedded ProGuard configuration options</h3>
60
61Instead of keeping an external ProGuard configuration file, you can also copy
62the 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
81Some minor syntactical changes are required in order to conform with the XML
82standard.
83<p>
84
85Firstly, the <code>#</code> character cannot be used for comments in an XML
86file. Comments must be enclosed by an opening <code>&lt;!--</code> and a
87closing <code>--&gt;</code>. All occurrences of the <code>#</code> character
88can be removed.
89<p>
90
91Secondly, the use of <code>&lt;</code> and <code>&gt;</code> characters would
92upset the structure of the XML build file. Environment variables are now
93enclosed by an opening <code>${</code> and a closing <code>}</code>. This
94syntax also allows you to use Ant properties within the ProGuard
95configuration. Other occurrences of <code>&lt;</code> and <code>&gt;</code>
96have to be encoded as <code>&amp;lt;</code> and <code>&amp;gt;</code>.
97<p>
98
99<h3>3. XML configuration tags</h3>
100
101If you really prefer a full-blown XML configuration, you can replace the
102ProGuard configuration options by XML configuration tags. The resulting
103configuration will be equivalent, but much more verbose and difficult to read,
104as XML goes. The remainder of this page presents the supported tags. For a
105more extensive discussion of their meaning, please consult the traditional <a
106href="usage.html">Usage</a> section. You can find some sample configuration
107files 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
113The <code><b>&lt;proguard&gt;</b></code> task and the
114<code><b>&lt;proguardconfiguration&gt;</b></code> task can have the following
115attributes (only for <code>&lt;proguard&gt;</code>) and nested
116elements:
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
454The jar tags are path tags, so they can have any of the path attributes (or
455nested 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
475In 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
505The 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
532The 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
577The class member tags can have the following <i>class_member_specification</i>
578attributes:
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>
606Copyright &copy; 2002-2009
607<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>.
608</address>
609</body>
610</html>
611