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