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 GUI</title> 8</head> 9<body> 10 11<h2>Graphical User Interface</h2> 12 13You can find the ProGuard GUI jar in the <code>lib</code> directory of the 14ProGuard distribution. To run the ProGuard graphical user interface, just type: 15<p class="code"> 16<code><b>java -jar proguardgui.jar</b> [-nosplash] </code>[<i>configuration_file</i>] 17</p> 18The GUI will pop up in a window. With the <code>-nosplash</code> option, you 19can switch off the short opening animation. If you have specified a ProGuard 20configuration file, it will be loaded. The GUI works like a wizard. You can 21edit the configuration and execute ProGuard through a few tabs: 22<p> 23 24<table cellspacing="5" cellpadding="5"> 25<tr><td class="button"><a href="#proguard">ProGuard</a></td> 26 <td>Optionally load an existing configuration file.</td></tr> 27<tr><td class="button"><a href="#inputoutput">Input/Output</a></td> 28 <td>Specify the program jars and library jars.</td></tr> 29<tr><td class="button"><a href="#shrinking">Shrinking</a></td> 30 <td>Specify the shrinking options.</td></tr> 31<tr><td class="button"><a href="#obfuscation">Obfuscation</a></td> 32 <td>Specify the obfuscation options.</td></tr> 33<tr><td class="button"><a href="#optimization">Optimization</a></td> 34 <td>Specify the optimization options.</td></tr> 35<tr><td class="button"><a href="#information">Information</a></td> 36 <td>Specify some options to get information.</td></tr> 37<tr><td class="button"><a href="#process">Process</a></td> 38 <td>View and save the resulting configuration, and run ProGuard.</td></tr> 39</table> 40<p> 41 42In addition, there is a tab to execute ReTrace interactively: 43<p> 44 45<table cellspacing="5" cellpadding="5"> 46<tr><td class="button"><a href="#retrace">ReTrace</a></td> 47 <td>Set up and run ReTrace, to de-obfuscate stack traces.</td></tr> 48</table> 49<p> 50 51You can freely toggle between the tabs by means of the buttons on the 52left-hand side of the window, or by means of the <b>Previous</b> and 53<b>Next</b> buttons at the bottom of the tabs. Tool tips briefly explain the 54purpose of the numerous options and text fields, although a basic 55understanding of the shrinking/optimization/obfuscation/preverification 56process is assumed. Please refer to the <a 57href="introduction.html">Introduction</a> of this manual. 58<p> 59 60<a name="proguard"> </a> 61<h2>The ProGuard Tab</h2> 62 63The <i>ProGuard</i> tab presents a welcome message and one important button at 64the bottom: 65<p> 66 67<table cellspacing="5" cellpadding="5"> 68<tr><td class="button">Load configuration...</td> 69 <td>opens a file chooser to load an existing ProGuard configuration 70 file.</td></tr> 71</table> 72<p> 73 74If you don't want to load an existing configuration, you can just continue 75creating a new configuration from scratch. 76<p> 77 78<a name="inputoutput"> </a> 79<h2>The Input/Output Tab</h2> 80 81The <i>Input/Output</i> tab contains two lists, respectively to specify the 82program jars (or wars, ears, zips, or directories), and the library jars (or 83wars, ears, zips, or directories). 84 85<ul> 86<li>The list of program jars contains input entries and output entries. Input 87 entries contain the class files and resource files to be processed. Output 88 entries specify the destinations to which the processed results will be 89 written. They are preceded by arrows, to distinguish them from input 90 entries. The results of each consecutive list of input entries will be 91 written to the subsequent consecutive list of output entries. 92 93<li>The library jars are not copied to the output jars; they contain class 94 files that are used by class files in the program jars and that are 95 necessary for correct processing. This list typically at least contains the 96 targeted Java runtime jar. 97</ul> 98<p> 99 100Each of these lists can be edited by means of a couple of buttons on the 101right-hand side: 102<p> 103 104<table cellspacing="5" cellpadding="5"> 105<tr><td class="button">Add input...</td> <td>opens a file chooser to add an 106 input entry to the list of program jars.</td></tr> 107<tr><td class="button">Add output...</td> <td>opens a file chooser to add an 108 output entry to the list of program jars.</td></tr> 109<tr><td class="button">Add...</td> 110 <td>opens a file chooser to add an entry to the list of library 111 jars.</td></tr> 112<tr><td class="button">Edit...</td> 113 <td>opens a file chooser to edit the selected entry in the list.</td></tr> 114<tr><td class="button">Filter...</td> 115 <td>opens a text entry field to add or edit the filters of the selected 116 entries in the list.</td></tr> 117<tr><td class="button">Remove</td> 118 <td>removes the selected entries from the list.</td></tr> 119<tr><td class="button">Move up</td> 120 <td>moves the selected entries one position up the list.</td></tr> 121<tr><td class="button">Move down</td> 122 <td>moves the selected entries one position down the list.</td></tr> 123<tr><td class="button">Move to libraries</td> 124 <td>moves the selected entries in the list of program jars to the list of 125 library jars.</td></tr> 126<tr><td class="button">Move to program</td> 127 <td>moves the selected entries in the list of library jars to the list of 128 program jars.</td></tr> 129</table> 130<p> 131 132Filters allow to filter files based on their names. One can specify filters 133for class file names and resource file names, for jar file names, for war file 134names, for ear file names, and for zip file names. Multiple entries in the 135program list only make sense when combined with filters; each output file is 136written to the first entry with a matching filter. 137<p> 138 139Input entries that are currently not readable are colored red. 140<p> 141 142The order of the entries in each list may matter, as the first occurrence of 143any duplicate entries gets precedence, just as in conventional class paths. 144<p> 145 146Corresponding configuration options: 147<ul type="none"> 148<li>-<a href="usage.html#injars">injars</a> 149<li>-<a href="usage.html#outjars">outjars</a> 150<li>-<a href="usage.html#libraryjars">libraryjars</a> 151<li><a href="usage.html#classpath"><i>class_path</i></a> 152<li><a href="usage.html#filters"><i>filters</i></a> 153</ul> 154<p> 155 156<a name="shrinking"> </a> 157<h2>The Shrinking Tab</h2> 158 159The <i>Shrinking</i> tab presents a number of options that affect the 160shrinking step. The basic options are followed by a few lists of classes and 161class members (fields and methods) that must be protected from shrinking (and 162implicitly from obfuscation as well). 163<p> 164 165The fixed lists contain predefined entries that are typically useful for many 166applications. Each of these entries can be toggled by means of a check box. 167The text field following each entry allows to constrain the applicable classes 168by means of a comma-separated list of wildcarded, fully-qualified class 169names. The default is "*", which means that all input classes of the 170corresponding type are considered. 171<p> 172 173For example, checking the <b>Applications</b> entry and filling in 174"myapplications.**" after it would mean: keep all classes that have main 175methods in the "myapplications" package and all of its subpackages. 176<p> 177 178The variable list at the bottom allows to define additional entries 179yourself. The list can be edited by means of a couple of buttons on the 180right-hand side: 181<p> 182 183<table cellspacing="5" cellpadding="5"> 184<tr><td class="button">Add...</td> 185 <td>opens a window to add a new entry to the list.</td></tr> 186<tr><td class="button">Edit...</td> 187 <td>opens a window to edit the selected entry in the list.</td></tr> 188<tr><td class="button">Remove</td> 189 <td>removes the selected entries from the list.</td></tr> 190<tr><td class="button">Move up</td> 191 <td>moves the selected entries one position up the list.</td></tr> 192<tr><td class="button">Move down</td> 193 <td>moves the selected entries one position down the list.</td></tr> 194</table> 195<p> 196 197The interface windows allow to specify classes, fields, and methods. They 198contain text fields and check boxes to constrain these items. They have 199<b>Ok</b> and <b>Cancel</b> buttons to apply or to cancel the operation. 200<p> 201 202For example, your application may be creating some classes dynamically using 203<code>Class.forName</code>. You should then specify them here, so they are kept 204by their original names. Press the <b>Add...</b> button to open the class 205window. Fill out the fully-qualified class name in the <b>Code</b> text field, 206and press the <b>Ok</b> button. Repeat this for all required classes. Wildcards 207can be helpful to specify a large number of related classes in one go. If you 208want to specify all implementations of a certain interface, fill out the 209fully qualified interface name in the <b>Extends/implements class</b> instead. 210<p> 211 212For more advanced settings, it is advisable to become familiar with ProGuard's 213configuration options through the <a href="usage.html">Usage section</a> and 214the <a href="examples.html">Examples section</a>. We'll suffice with a brief 215overview of the three dialogs provided by the GUI. 216<p> 217 218The <i>keep class</i> dialog appears when adding or editing new special keep 219entries. It has text fields and selections for specifying and constraining 220classes and class members to keep. The <b>Advanced options</b> / <b>Basic 221options</b> button at the bottom of the dialog allows to toggle showing the 222advanced options. 223 224<ul> 225<li>The <b>Comments</b> text field allows to add optional comments to this 226 entry. The comments will identify the entry in the list and they will 227 appear as comments in the configuration file. 228 229<li>The <b>Keep</b> selection allows to specify whether you want to protect 230 the specified classes and their specified class members, or just the 231 specified class members from the specified classes, or the specified 232 classes and the specified class members, if the class members are present. 233 Note that class members will only be protected if they are explicitly 234 specified, even if only by means of a wildcard. 235 236<li>The <b>Allow</b> selection allows to specify whether you want to allow the 237 the specified classes and their specified class members to be shrunk, 238 optimized and/or obfuscated. 239 240<li>The <b>Access</b> selections allows to specify constraints on the class or 241 classes, based on their access modifiers. 242 243<li>The <b>Annotation</b> text field takes the fully-qualified name of an 244 annotation that is required for matching classes. The annotation name can 245 contain wildcards. This is an advanced option for defining <i>keep</i> 246 annotations. 247 248<li>The <b>Class</b> text field takes the fully-qualified name of the class or 249 classes. The class name can contain wildcards. 250 251<li>The <b>Annotation</b> text field takes the fully-qualified name of an 252 annotation that is required for the class or interface that the above 253 class must extend. The annotation name can contain wildcards. This is an 254 advanced option for defining <i>keep</i> annotations. 255 256<li>The <b>Extends/implements class</b> text field takes the fully-qualified 257 name of the class or interface that the above classes must extend. 258 259<li>The <b>Class members</b> list allows to specify a list of fields and 260 methods to keep. It can be edited by means of a list of buttons on the 261 right-hand side. 262</ul> 263<p> 264 265The <i>keep field</i> dialog appears when adding or editing fields within the 266above dialog. It has text fields and selections for specifying and 267constraining fields to keep. Again, the <b>Advanced options</b> / <b>Basic 268options</b> button at the bottom of the dialog allows to toggle showing the 269advanced options. 270 271<ul> 272<li>The <b>Access</b> selections allows to specify constraints on the field or 273 fields, based on their access modifiers. 274 275<li>The <b>Annotation</b> text field takes the fully-qualified name of an 276 annotation that is required for matching fields. The annotation name can 277 contain wildcards. This is an advanced option for defining <i>keep</i> 278 annotations. 279 280<li>The <b>Return type</b> text field takes the fully-qualified type of the 281 field or fields. The type can contain wildcards. 282 283<li>The <b>Name</b> text field takes the name of the field or fields. The field 284 name can contain wildcards. 285</ul> 286<p> 287 288Similarly, the <i>keep method</i> dialog appears when adding or editing 289methods within the keep class dialog. It has text fields and selections for 290specifying and constraining methods to keep. Again, the <b>Advanced 291options</b> / <b>Basic options</b> button at the bottom of the dialog allows 292to toggle showing the advanced options. 293 294<ul> 295<li>The <b>Access</b> selections allows to specify constraints on the method or 296 methods, based on their access modifiers. 297 298<li>The <b>Annotation</b> text field takes the fully-qualified name of an 299 annotation that is required for matching methods. The annotation name can 300 contain wildcards. This is an advanced option for defining <i>keep</i> 301 annotations. 302 303<li>The <b>Return type</b> text field takes the fully-qualified type of the method or methods. The type can contain wildcards. 304 305<li>The <b>Name</b> text field takes the name of the method or methods. The 306 method name can contain wildcards. 307 308<li>The <b>Arguments</b> text field takes the comma-separated list of 309 fully-qualified method arguments. Each of these arguments can contain 310 wildcards. 311</ul> 312<p> 313 314Corresponding configuration options: 315<ul type="none"> 316<li>-<a href="usage.html#dontshrink">dontshrink</a> 317<li>-<a href="usage.html#printusage">printusage</a> 318<li>-<a href="usage.html#keep">keep</a> 319<li>-<a href="usage.html#keepclassmembers">keepclassmembers</a> 320<li>-<a href="usage.html#keepclasseswithmembers">keepclasseswithmembers</a> 321</ul> 322<p> 323 324<a name="obfuscation"> </a> 325<h2>The Obfuscation Tab</h2> 326 327The <i>Obfuscation</i> tab presents a number of options that affect the 328obfuscation step. The basic options are followed by a few lists of classes and 329class members (fields and methods) that must be protected from obfuscation 330(but not necessarily from shrinking). 331<p> 332 333The lists are manipulated in the same way as in the <a 334href="#shrinking">Shrinking Tab</a>. 335<p> 336 337Corresponding configuration options: 338<ul type="none"> 339<li>-<a href="usage.html#dontobfuscate">dontobfuscate</a> 340<li>-<a href="usage.html#printmapping">printmapping</a> 341<li>-<a href="usage.html#applymapping">applymapping</a> 342<li>-<a href="usage.html#obfuscationdictionary">obfuscationdictionary</a> 343<li>-<a href="usage.html#classobfuscationdictionary">classobfuscationdictionary</a> 344<li>-<a href="usage.html#packageobfuscationdictionary">packageobfuscationdictionary</a> 345<li>-<a href="usage.html#overloadaggressively">overloadaggressively</a> 346<li>-<a href="usage.html#useuniqueclassmembernames">useuniqueclassmembernames</a> 347<li>-<a href="usage.html#dontusemixedcaseclassnames">dontusemixedcaseclassnames</a> 348<li>-<a href="usage.html#keeppackagenames">keeppackagenames</a> 349<li>-<a href="usage.html#flattenpackagehierarchy">flattenpackagehierarchy</a> 350<li>-<a href="usage.html#repackageclasses">repackageclasses</a> 351<li>-<a href="usage.html#keepattributes">keepattributes</a> 352<li>-<a href="usage.html#renamesourcefileattribute">renamesourcefileattribute</a> 353<li>-<a href="usage.html#adaptclassstrings">adaptclassstrings</a> 354<li>-<a href="usage.html#adaptresourcefilenames">adaptresourcefilenames</a> 355<li>-<a href="usage.html#adaptresourcefilecontents">adaptresourcefilecontents</a> 356<li>-<a href="usage.html#keepnames">keepnames</a> 357<li>-<a href="usage.html#keepclassmembernames">keepclassmembernames</a> 358<li>-<a href="usage.html#keepclasseswithmembernames">keepclasseswithmembernames</a> 359<li><a href="usage.html#classspecification"><i>class_specification</i></a> 360</ul> 361<p> 362 363<a name="optimization"> </a> 364<h2>The Optimization Tab</h2> 365 366The <i>Optimization</i> tab presents a number of options that affect the 367optimization step. The basic options are followed by a few lists of class 368method calls that can be removed if ProGuard can determine that their results 369are not being used. 370<p> 371 372The lists are manipulated in much the same way as in the <a 373href="#shrinking">Shrinking Tab</a>. 374<p> 375 376Corresponding configuration options: 377<ul type="none"> 378<li>-<a href="usage.html#dontoptimize">dontoptimize</a> 379<li>-<a href="usage.html#optimizations">optimizations</a> 380<li>-<a href="usage.html#optimizationpasses">optimizationpasses</a> 381<li>-<a href="usage.html#allowaccessmodification">allowaccessmodification</a> 382<li>-<a href="usage.html#mergeinterfacesaggressively">mergeinterfacesaggressively</a> 383<li>-<a href="usage.html#assumenosideeffects">assumenosideeffects</a> 384<li><a href="usage.html#classspecification"><i>class_specification</i></a> 385</ul> 386<p> 387 388<a name="information"> </a> 389<h2>The Information Tab</h2> 390 391The <i>Information</i> tab presents a number of options for preverification 392and targeting, and for the information that ProGuard returns when processing 393your code. The bottom list allows you to query ProGuard about why given 394classes and class members are being kept in the shrinking step. 395<p> 396 397Corresponding configuration options: 398<ul type="none"> 399<li>-<a href="usage.html#dontpreverify">dontpreverify</a> 400<li>-<a href="usage.html#microedition">microedition</a> 401<li>-<a href="usage.html#target">target</a> 402<li>-<a href="usage.html#verbose">verbose</a> 403<li>-<a href="usage.html#dontnote">dontnote</a> 404<li>-<a href="usage.html#dontwarn">dontwarn</a> 405<li>-<a href="usage.html#ignorewarnings">ignorewarnings</a> 406<li>-<a href="usage.html#dontskipnonpubliclibraryclasses">dontskipnonpubliclibraryclasses</a> 407<li>-<a href="usage.html#dontskipnonpubliclibraryclassmembers">dontskipnonpubliclibraryclassmembers</a> 408<li>-<a href="usage.html#keepdirectories">keepdirectories</a> 409<li>-<a href="usage.html#forceprocessing">forceprocessing</a> 410<li>-<a href="usage.html#printseeds">printseeds</a> 411<li>-<a href="usage.html#printconfiguration">printconfiguration</a> 412<li>-<a href="usage.html#dump">dump</a> 413<li>-<a href="usage.html#whyareyoukeeping">whyareyoukeeping</a> 414</ul> 415<p> 416 417<a name="process"> </a> 418<h2>The Process Tab</h2> 419 420The <i>Process</i> tab has an output console for displaying the configuration 421and the messages while processing. There are three important buttons at the 422bottom: 423<p> 424 425<table cellspacing="5" cellpadding="5"> 426<tr><td class="button">View configuration</td> 427 <td>displays the current ProGuard configuration in the console.</td></tr> 428<tr><td class="button">Save configuration...</td> 429 <td>opens a file chooser to save the current ProGuard 430 configuration.</td></tr> 431<tr><td class="button">Process!</td> 432 <td>executes ProGuard with the current configuration.</td></tr> 433</table> 434<p> 435 436<a name="retrace"> </a> 437<h2>The ReTrace Tab</h2> 438 439The <i>ReTrace</i> tab has a panel with a few settings, an input text area for 440the obfuscated stack trace, and an output console to view the de-obfuscated 441stack trace: 442 443<ul> 444<li>The <b>Verbose</b> check box in the settings panel allows to toggle between 445 normal mode and verbose mode. 446 447<li>The <b>Mapping file</b> text field takes the name of the required mapping 448 file that ProGuard wrote while processing the original code. The file name 449 can be entered manually or by means of the <b>Browse...</b> button that 450 opens a file chooser. 451 452<li>The <b>Obfuscated stack trace</b> text area allows to enter the stack 453 trace, typically by copying and pasting it from elsewhere. Alternatively, 454 it can be loaded from a file by means of the load button below. 455</ul> 456 457There are two buttons at the bottom: 458<p> 459 460<table cellspacing="5" cellpadding="5"> 461<tr><td class="button">Load stack trace...</td> 462 <td>opens a file chooser to load an obfuscated stack trace.</td></tr> 463<tr><td class="button">ReTrace!</td> 464 <td>executes ReTrace with the current settings.</td></tr> 465</table> 466<p> 467 468<hr> 469<address> 470Copyright © 2002-2009 471<a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. 472</address> 473</body> 474</html> 475