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>ProGuard Reference Card</title> 8</head> 9<body> 10 11<h1>ProGuard Reference Card</h1> 12 13<h2>Usage</h2> 14 15<code><b>java -jar proguard.jar </b></code><i>options</i> ... 16<p> 17 Typically: 18<p> 19<code><b>java -jar proguard.jar @myconfig.pro</b></code> 20<p> 21 22<h2>Options</h2> 23 24<table cellspacing="10"> 25 26<tr> 27<td valign="top"><a href="usage.html#at"><code><b>@</b></code></a><a href="usage.html#filename"><i>filename</i></a></td> 28 29<td>Short for '<code>-include</code> <i>filename</i>'.</td> 30</tr> 31 32<tr> 33<td valign="top"><a href="usage.html#include"><code><b>-include</b></code></a> 34 <a href="usage.html#filename"><i>filename</i></a></td> 35 36<td>Read configuration options from the given file.</td> 37</tr> 38 39<tr> 40<td valign="top"><a href="usage.html#basedirectory"><code><b>-basedirectory</b></code></a> 41 <a href="usage.html#filename"><i>directoryname</i></a></td> 42 43<td>Specifies the base directory for subsequent relative file names.</td> 44</tr> 45 46<tr> 47<td valign="top"><a href="usage.html#injars"><code><b>-injars</b></code></a> 48 <a href="usage.html#classpath"><i>class_path</i></a></td> 49<td>Specifies the program jars (or wars, ears, zips, or directories).</td> 50</tr> 51 52<tr> 53<td valign="top"><a href="usage.html#outjars"><code><b>-outjars</b></code></a> 54 <a href="usage.html#classpath"><i>class_path</i></a></td> 55<td>Specifies the name of the output jars (or wars, ears, zips, or 56 directories).</td> 57</tr> 58 59<tr> 60<td valign="top"><a href="usage.html#libraryjars"><code><b>-libraryjars</b></code></a> 61 <a href="usage.html#classpath"><i>class_path</i></a></td> 62<td>Specifies the library jars (or wars, ears, zips, or directories).</td> 63</tr> 64 65<tr> 66<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclasses"><code><b>-dontskipnonpubliclibraryclasses</b></code></a></td> 67<td>Don't ignore non-public library classes.</td> 68</tr> 69 70<tr> 71<td valign="top"><a href="usage.html#dontskipnonpubliclibraryclassmembers"><code><b>-dontskipnonpubliclibraryclassmembers</b></code></a></td> 72<td>Don't ignore package visible library class members.</td> 73</tr> 74 75<tr> 76<td valign="top"><a href="usage.html#keepdirectories"><code><b>-keepdirectories</b></code></a> 77 [<a href="usage.html#filters"><i>directory_filter</i></a>]</td> 78<td>Keep the specified directories in the output jars (or wars, ears, zips, or 79 directories).</td> 80</tr> 81 82<tr> 83<td valign="top"><a href="usage.html#target"><code><b>-target</b></code></a> 84 <i>version</i></td> 85<td>Set the given version number in the processed classes.</td> 86</tr> 87 88<tr> 89<td valign="top"><a href="usage.html#forceprocessing"><code><b>-forceprocessing</b></code></a></td> 90<td>Process the input, even if the output seems up to date.</td> 91</tr> 92 93<tr> 94<td valign="top"><a href="usage.html#keep"><code><b>-keep</b></code></a> 95 [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...] 96 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 97<td>Preserve the specified classes <i>and</i> class members.</td> 98 99</tr> 100<tr> 101<td valign="top"><a href="usage.html#keepclassmembers"><code><b>-keepclassmembers</b></code></a> 102 [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...] 103 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 104<td>Preserve the specified class members, if their classes are preserved as 105 well.</td> 106</tr> 107 108<tr> 109<td valign="top"><a href="usage.html#keepclasseswithmembers"><code><b>-keepclasseswithmembers</b></code></a> 110 [<a href="usage.html#keepoptionmodifiers">,<i>modifier</i></a>,...] 111 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 112<td>Preserve the specified classes <i>and</i> class members, if all of the 113 specified class members are present.</td> 114</tr> 115 116<tr> 117<td valign="top"><a href="usage.html#keepnames"><code><b>-keepnames</b></code></a> 118 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 119<td>Preserve the names of the specified classes <i>and</i> class members (if 120 they aren't removed in the shrinking step).</td> 121</tr> 122 123<tr> 124<td valign="top"><a href="usage.html#keepclassmembernames"><code><b>-keepclassmembernames</b></code></a> 125 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 126<td>Preserve the names of the specified class members (if they aren't removed 127 in the shrinking step).</td> 128</tr> 129 130<tr> 131<td valign="top"><a href="usage.html#keepclasseswithmembernames"><code><b>-keepclasseswithmembernames</b></code></a> 132 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 133<td>Preserve the names of the specified classes <i>and</i> class members, if 134 all of the specified class members are present (after the shrinking 135 step).</td> 136</tr> 137 138<tr> 139<td valign="top"><a href="usage.html#printseeds"><code><b>-printseeds</b></code></a> 140 [<a href="usage.html#filename"><i>filename</i></a>]</td> 141<td>List classes and class members matched by the various <code>-keep</code> 142 options, to the standard output or to the given file.</td> 143</tr> 144 145<tr> 146<td valign="top"><a href="usage.html#dontshrink"><code><b>-dontshrink</b></code></a></td> 147<td>Don't shrink the input class files.</td> 148</tr> 149 150<tr> 151<td valign="top"><a href="usage.html#printusage"><code><b>-printusage</b></code></a> 152 [<a href="usage.html#filename"><i>filename</i></a>]</td> 153<td>List dead code of the input class files, to the standard output or to the 154 given file.</td> 155</tr> 156 157<tr> 158<td valign="top"><a href="usage.html#whyareyoukeeping"><code><b>-whyareyoukeeping</b></code></a> 159 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 160<td>Print details on why the given classes and class members are being kept in 161 the shrinking step.</td> 162</tr> 163 164<tr> 165<td valign="top"><a href="usage.html#dontoptimize"><code><b>-dontoptimize</b></code></a></td> 166<td>Don't optimize the input class files.</td> 167</tr> 168 169<tr> 170<td valign="top"><a href="usage.html#optimizations"><code><b>-optimizations</b></code></a> 171 <a href="optimizations.html"><i>optimization_filter</i></a></td> 172<td>The optimizations to be enabled and disabled.</td> 173</tr> 174 175<tr> 176<td valign="top"><a href="usage.html#optimizationpasses"><code><b>-optimizationpasses</b></code></a> 177 <i>n</i></td> 178<td>The number of optimization passes to be performed.</td> 179</tr> 180 181<tr> 182<td valign="top"><a href="usage.html#assumenosideeffects"><code><b>-assumenosideeffects</b></code></a> 183 <a href="usage.html#classspecification"><i>class_specification</i></a></td> 184<td>Assume that the specified methods don't have any side effects, while 185 optimizing.</td> 186</tr> 187 188<tr> 189<td valign="top"><a href="usage.html#allowaccessmodification"><code><b>-allowaccessmodification</b></code></a></td> 190<td>Allow the access modifiers of classes and class members to be modified, 191 while optimizing.</td> 192</tr> 193 194<tr> 195<td valign="top"><a href="usage.html#mergeinterfacesaggressively"><code><b>-mergeinterfacesaggressively</b></code></a></td> 196<td>Allow any interfaces to be merged, while optimizing.</td> 197</tr> 198 199<tr> 200<td valign="top"><a href="usage.html#dontobfuscate"><code><b>-dontobfuscate</b></code></a></td> 201<td>Don't obfuscate the input class files.</td> 202</tr> 203 204<tr> 205<td valign="top"><a href="usage.html#printmapping"><code><b>-printmapping</b></code></a> 206 [<a href="usage.html#filename"><i>filename</i></a>]</td> 207<td>Print the mapping from old names to new names for classes and class members 208 that have been renamed, to the standard output or to the given file.</td> 209</tr> 210 211<tr> 212<td valign="top"><a href="usage.html#applymapping"><code><b>-applymapping</b></code></a> 213 <a href="usage.html#filename"><i>filename</i></a></td> 214<td>Reuse the given mapping, for incremental obfuscation.</td> 215</tr> 216 217<tr> 218<td valign="top"><a href="usage.html#obfuscationdictionary"><code><b>-obfuscationdictionary</b></code></a> 219 <a href="usage.html#filename"><i>filename</i></a></td> 220<td>Use the words in the given text file as obfuscated field names and method names.</td> 221</tr> 222 223<tr> 224<td valign="top"><a href="usage.html#classobfuscationdictionary"><code><b>-classobfuscationdictionary</b></code></a> 225 <a href="usage.html#filename"><i>filename</i></a></td> 226<td>Use the words in the given text file as obfuscated class names.</td> 227</tr> 228 229<tr> 230<td valign="top"><a href="usage.html#packageobfuscationdictionary"><code><b>-packageobfuscationdictionary</b></code></a> 231 <a href="usage.html#filename"><i>filename</i></a></td> 232<td>Use the words in the given text file as obfuscated package names.</td> 233</tr> 234 235<tr> 236<td valign="top"><a href="usage.html#overloadaggressively"><code><b>-overloadaggressively</b></code></a></td> 237<td>Apply aggressive overloading while obfuscating.</td> 238</tr> 239 240<tr> 241<td valign="top"><a href="usage.html#useuniqueclassmembernames"><code><b>-useuniqueclassmembernames</b></code></a></td> 242<td>Ensure uniform obfuscated class member names for subsequent incremental 243 obfuscation.</td> </tr> 244 245<tr> 246<td valign="top"><a href="usage.html#dontusemixedcaseclassnames"><code><b>-dontusemixedcaseclassnames</b></code></a></td> 247<td>Don't generate mixed-case class names while obfuscating.</td> 248</tr> 249 250<tr> 251<td valign="top"><a href="usage.html#keeppackagenames"><code><b>-keeppackagenames</b></code></a> 252 [<i><a href="usage.html#filters">package_filter</a></i>]</td> 253<td>Keep the specified package names from being obfuscated.</td> 254</tr> 255 256<tr> 257<td valign="top"><a href="usage.html#flattenpackagehierarchy"><code><b>-flattenpackagehierarchy</b></code></a> 258 [<i>package_name</i>]</td> 259<td>Repackage all packages that are renamed into the single given parent 260 package.</td> 261</tr> 262 263<tr> 264<td valign="top"><a href="usage.html#repackageclasses"><code><b>-repackageclasses</b></code></a> 265 [<i>package_name</i>]</td> 266<td>Repackage all class files that are renamed into the single given 267 package.</td> 268</tr> 269 270<tr> 271<td valign="top"><a href="usage.html#keepattributes"><code><b>-keepattributes</b></code></a> 272 [<i><a href="usage.html#filters">attribute_filter</a></i>]</td> 273<td>Preserve the given optional attributes; typically 274 <code>Exceptions</code>, <code>InnerClasses</code>, 275 <code>Signature</code>, <code>Deprecated</code>, 276 <code>SourceFile</code>, <code>SourceDir</code>, 277 <code>LineNumberTable</code>, 278 <code>LocalVariableTable</code>, <code>LocalVariableTypeTable</code>, 279 <code>Synthetic</code>, <code>EnclosingMethod</code>, and 280 <code>*Annotation*</code>.</td> 281</tr> 282 283<tr> 284<td valign="top"><a href="usage.html#renamesourcefileattribute"><code><b>-renamesourcefileattribute</b></code></a> 285 [<i>string</i>]</td> 286<td>Put the given constant string in the <code>SourceFile</code> 287 attributes.</td> 288</tr> 289 290<tr> 291<td valign="top"><a href="usage.html#adaptclassstrings"><code><b>-adaptclassstrings</b></code></a> 292 [<a href="usage.html#filters"><i>class_filter</i></a>]</td> 293<td>Adapt string constants in the specified classes, based on the obfuscated 294 names of any corresponding classes.</td> 295</tr> 296 297<tr> 298<td valign="top"><a href="usage.html#adaptresourcefilenames"><code><b>-adaptresourcefilenames</b></code></a> 299 [<a href="usage.html#filefilters"><i>file_filter</i></a>]</td> 300<td>Rename the specified resource files, based on the obfuscated names of the 301 corresponding class files.</td> 302</tr> 303 304<tr> 305<td valign="top"><a href="usage.html#adaptresourcefilecontents"><code><b>-adaptresourcefilecontents</b></code></a> 306 [<a href="usage.html#filefilters"><i>file_filter</i></a>]</td> 307<td>Update the contents of the specified resource files, based on the 308 obfuscated names of the processed classes.</td> 309</tr> 310 311<tr> 312<td valign="top"><a href="usage.html#dontpreverify"><code><b>-dontpreverify</b></code></a></td> 313<td>Don't preverify the processed class files.</td> 314</tr> 315 316<tr> 317<td valign="top"><a href="usage.html#microedition"><code><b>-microedition</b></code></a></td> 318<td>Target the processed class files at Java Micro Edition.</td> 319</tr> 320 321<tr> 322<td valign="top"><a href="usage.html#verbose"><code><b>-verbose</b></code></a></td> 323<td>Write out some more information during processing.</td> 324</tr> 325 326<tr> 327<td valign="top"><a href="usage.html#dontnote"><code><b>-dontnote</b></code></a> 328 [<a href="usage.html#filters"><i>class_filter</i></a>]</td> 329<td>Don't print notes about potential mistakes or omissions in the 330 configuration.</td> 331</tr> 332 333<tr> 334<td valign="top"><a href="usage.html#dontwarn"><code><b>-dontwarn</b></code></a> 335 [<a href="usage.html#filters"><i>class_filter</i></a>]</td> 336<td>Don't warn about unresolved references at all.</td> 337</tr> 338 339<tr> 340<td valign="top"><a href="usage.html#ignorewarnings"><code><b>-ignorewarnings</b></code></a></td> 341<td>Print warnings about unresolved references, but continue processing 342 anyhow.</td> 343</tr> 344 345<tr> 346<td valign="top"><a href="usage.html#printconfiguration"><code><b>-printconfiguration</b></code></a> 347 [<a href="usage.html#filename"><i>filename</i></a>]</td> 348<td>Write out the internal structure of the processed class files, to the 349 standard output or to the given file.</td> 350</tr> 351 352<tr> 353<td valign="top"><a href="usage.html#dump"><code><b>-dump</b></code></a> 354 [<a href="usage.html#filename"><i>filename</i></a>]</td> 355<td>Write out the entire configuration in traditional ProGuard style, to the 356 standard output or to the given file.</td> 357</tr> 358 359</table> 360<p> 361Notes: 362<ul> 363 364<li><i>class_path</i> is a list of jars, wars, ears, zips, and directories, 365 with optional filters, separated by path separators. 366<li><i>filename</i> can contain Java system properties delimited by 367 '<b><</b>' and '<b>></b>'. 368<li>If <i>filename</i> contains special characters, the entire name 369 should be quoted with single or double quotes. 370</ul> 371<p> 372 373<h2>Overview of <code>Keep</code> Options</h2> 374 375<table cellpadding="5"> 376 377<tr> 378<th>Keep</th> 379<td>From being removed or renamed</td> 380<td>From being renamed</td> 381</tr> 382 383<tr> 384<td>Classes and class members</td> 385<td bgcolor="#E0E0E0"><a href="usage.html#keep"><code>-keep</code></a></td> 386<td bgcolor="#E0E0E0"><a href="usage.html#keepnames"><code>-keepnames</code></a></td> 387</tr> 388 389<tr> 390<td>Class members only</td> 391<td bgcolor="#E0E0E0"><a href="usage.html#keepclassmembers"><code>-keepclassmembers</code></a></td> 392<td bgcolor="#E0E0E0"><a href="usage.html#keepclassmembernames"><code>-keepclassmembernames</code></a></td> 393</tr> 394 395<tr> 396<td>Classes and class members, if class members present</td> 397<td bgcolor="#E0E0E0"><a href="usage.html#keepclasseswithmembers"><code>-keepclasseswithmembers</code></a></td> 398<td bgcolor="#E0E0E0"><a href="usage.html#keepclasseswithmembernames"><code>-keepclasseswithmembernames</code></a></td> 399</tr> 400 401</table> 402<p> 403 404<h2>Keep Option Modifiers</h2> 405 406<table cellspacing="10"> 407 408<tr> 409<td valign="top"><a href="usage.html#allowshrinking"><code><b>allowshrinking</b></code></a></td> 410<td>The entry points specified in the keep tag may be shrunk.</td> 411</tr> 412 413<tr> 414<td valign="top"><a href="usage.html#allowoptimization"><code><b>allowoptimization</b></code></a></td> 415<td>The entry points specified in the keep tag may be optimized.</td> 416</tr> 417 418<tr> 419<td valign="top"><a href="usage.html#allowobfuscation"><code><b>allowobfuscation</b></code></a></td> 420<td>The entry points specified in the keep tag may be obfuscated.</td> 421</tr> 422 423</table> 424<p> 425 426<h2>Class Specifications</h2> 427 428<pre> 429[<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>final</b>|<b>abstract</b> ...] [<b>!</b>]<b>interface</b>|<b>class</b> <i>classname</i> 430 [<b>extends</b>|<b>implements</b> [<b>@</b><i>annotationtype</i>] <i>classname</i>] 431[<b>{</b> 432 [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>volatile</b>|<b>transient</b> ...] <b><fields></b> | 433 (<i>fieldtype fieldname</i>)<b>;</b> 434 [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b>|<b>synchronized</b>|<b>native</b>|<b>abstract</b>|<b>strictfp</b> ...] <b><methods></b> | 435 <b><init>(</b><i>argumenttype,...</i><b>)</b> | 436 <i>classname</i><b>(</b><i>argumenttype,...</i><b>)</b> | 437 (<i>returntype methodname</i><b>(</b><i>argumenttype,...</i><b>)</b>)<b>;</b> 438 [<b>@</b><i>annotationtype</i>] [[<b>!</b>]<b>public</b>|<b>private</b>|<b>protected</b>|<b>static</b> ... ] <b>*;</b> 439 ... 440<b>}</b>] 441</pre> 442<p> 443Notes: 444<ul> 445<li>Class names must always be fully qualified, i.e. including their package 446 names. 447<li>Types in <i>classname</i>, <i>annotationtype</i>, <i>returntype</i>, and 448 <i>argumenttype</i> can contain wildcards: '<code><b>?</b></code>' for a 449 single character, '<code><b>*</b></code>' for any number of characters 450 (but not the package separator), '<code><b>**</b></code>' for any number 451 of (any) characters, '<code><b>%</b></code>' for any primitive type, 452 '<code><b>***</b></code>' for any type, and '<code><b>...</b></code>' for any number of arguments.. 453<li><i>fieldname</i> and <i>methodname</i> can contain wildcards as well: 454 '<code><b>?</b></code>' for a single character and '<code><b>*</b></code>' 455 for any number of characters. 456</ul> 457<p> 458 459<hr> 460<address> 461Copyright © 2002-2009 462<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. 463</address> 464</body> 465</html> 466