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