1
2<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3<html>
4<head>
5<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
6<meta http-equiv="content-style-type" content="text/css">
7<link rel="stylesheet" type="text/css" href="style.css">
8<title>ProGuard Downloads</title>
9<script type="text/javascript" language="JavaScript">
10<!--
11if (window.self==window.top)
12  window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
13else {
14  var hash="#"+window.location.pathname.replace(window.top.location.pathname.replace("index.html", ""), "");
15  if (window.top.location.hash!=hash)
16    window.top.location.hash=hash;
17}
18//-->
19</script>
20</head>
21<body>
22
23<h2>Downloads</h2>
24
25<b>ProGuard</b> is distributed under the terms of the GNU General Public
26License. Please consult the <a href="license.html">license page</a> for more
27details.
28<p>
29<b>ProGuard</b> is written in Java, so it requires a Java Runtime Environment
30   (JRE 1.5 or higher).
31<p>
32You can download the latest release (containing the program jars, the
33documentation that you're reading now, examples, and the source code) from this
34location:
35<p>
36<center><a href="http://sourceforge.net/projects/proguard/files/"
37target="other">Download section at SourceForge</a></center>
38<p>
39
40The <a href="http://sourceforge.net/projects/proguard/files/proguard/"
41target="other">proguard</a> section contains major releases and updates with
42sub-minor version numbers, for applying emergency fixes. The
43<a href="http://sourceforge.net/projects/proguard/files/proguard%20beta/"
44target="other">proguard beta</a> section contains beta releases. These include
45new features and any less urgent bug fixes collected since the previous
46release.
47<p>
48If you're still working with an older version of <b>ProGuard</b>, check out
49the summary of changes below, to see if you're missing something essential.
50Better look at the up-to-date <a
51href="http://proguard.sourceforge.net/downloads.html">on-line version</a> if
52you're reading a local copy of this page. Unless noted otherwise,
53<b>ProGuard</b> remains compatible across versions, so don't be afraid to
54update.
55<p>
56If you're only interested in individual jar files for your build process, you
57can also download them from the Maven Central repository, with GroupId
58<a href="http://search.maven.org/#search|ga|1|g:%22net.sf.proguard%22"
59target="other">net.sf.proguard</a> and ArtifactIds
60<a href="http://search.maven.org/#search|ga|1|a:%22proguard-parent%22"
61target="other">proguard-parent</a>,
62<a href="http://search.maven.org/#search|ga|1|a:%22proguard-base%22"
63target="other">proguard-base</a>,
64<a href="http://search.maven.org/#search|ga|1|a:%22proguard-gui%22"
65target="other">proguard-gui</a>,
66<a href="http://search.maven.org/#search|ga|1|a:%22proguard-anttask%22"
67target="other">proguard-anttask</a>,
68<a href="http://search.maven.org/#search|ga|1|a:%22proguard-gradle%22"
69target="other">proguard-gradle</a>,
70<a href="http://search.maven.org/#search|ga|1|a:%22proguard-wtk-plugin%22"
71target="other">proguard-wtk-plugin</a>, and
72<a href="http://search.maven.org/#search|ga|1|a:%22proguard-retrace%22"
73target="other">proguard-retrace</a>.
74
75<h3><div>Jul 2013</div> Version 4.10</h3>
76<ul>
77<li>Made Gradle task resolve files lazily.
78<li>Enabled as-needed execution in Gradle task.
79<li>Using standard string interpolation for Gradle configuration.
80<li>Reduced log levels for console output in Gradle task.
81<li>Updated documentation and examples.
82</ul>
83
84<h3><div>Mar 2013</div> Version 4.9</h3>
85<ul>
86<li>Added Gradle task.
87<li>Added more peephole optimizations for strings.
88<li>Improved optimization of classes with static initializers.
89<li>Improved processing of finally blocks compiled with JDK 1.4 or older.
90<li>Fixed shrinking of access widening abstract methods, for the Dalvik VM.
91<li>Fixed overly aggressive shrinking of class annotations.
92<li>Fixed processing of unused classes in generic signatures.
93<li>Fixed merging of classes with similar class members.
94<li>Added java system property <code>optimize.conservatively</code> to allow
95    for instructions intentionally throwing <code>NullPointerException</code>,
96    <code>ArrayIndexOutOfBoundsException</code>, or
97    <code>ClassCastException</code> without other useful effects.
98<li>Fixed optimization of unnecessary variable initializations.
99<li>Fixed optimization of code involving NaN.
100<li>Fixed inlining of methods that are supposed to be kept.
101<li>Fixed preverification of artificially convoluted dup constructs.
102<li>Fixed quotes for java commands in .bat scripts.
103<li>Improved handling of non-sequential line number information.
104<li>Now requiring Java 5 or higher for running ProGuard.
105<li>Updated build files.
106<li>Updated documentation and examples.
107</ul>
108
109<h3><div>May 2012</div> Version 4.8</h3>
110<ul>
111<li>Added more peephole optimizations for strings.
112<li>Added support for multiple external configuration files in Ant
113    configurations.
114<li>Added support for Ant properties in external configuration files.
115<li>Fixed parsing of empty file filters on input and output.
116<li>Fixed parsing of '*' wildcard for file filters and name filters.
117<li>Fixed obfuscation of private methods that are overridden in concrete
118    classes with intermediary abstract classes and interfaces (workaround
119    for Oracle bugs #6691741 and #6684387).
120<li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or
121    earlier.
122<li>Fixed optimizing signatures of methods that are marked as not having
123    side effects.
124<li>Fixed optimization of long local variables possibly causing verification
125    error for register pairs.
126<li>Fixed merging of classes defined inside methods.
127<li>Fixed stack consistency in optimization step.
128<li>No longer removing debug information about unused parameters, for
129    <code>-keepparameternames</code> or <code>-keepattributes</code>.
130<li>Fixed updating manifest files with carriage return characters.
131<li>Now removing unreachable code in preverification step.
132<li>Improved default regular expression for stack traces in ReTrace.
133<li>Updated documentation and examples.
134</ul>
135
136<h3><div>Dec 2011</div> Version 4.7</h3>
137<ul>
138<li>Added support for Java 7.
139<li>Parsing unquoted file names with special characters more leniently.
140<li>Added support for instance methods overriding class methods.
141<li>Added removal of unused parameterless constructors.
142<li>Added removal of empty class initializers.
143<li>Added peephole optimizations for constant strings.
144<li>Avoiding idle optimization passes.
145<li>Improved removal of unused constants after obfuscation.
146<li>Fixed removal of unused classes referenced by annotations.
147<li>Fixed simplifying parameters of constructors that should actually be
148    preserved.
149<li>Fixed simplifying parameters of large numbers of similar constructors.
150<li>Fixed exceptions in optimization of unusual obfuscated code.
151<li>Fixed NullPointerException when specifying <code>-keepclassmembers</code>
152    without specific class or class members.
153<li>Fixed potential problems with mixed-case class name dictionaries when not
154    allowing mixed-case class names.
155<li>Fixed obfuscation of classes with EnclosingMethod attributes that don't
156    specify methods.
157<li>Fixed preverification of returning try blocks with finally blocks, inside
158    try blocks, when compiled with JDK 1.4.
159<li>Fixed sorting of interfaces containing generics.
160<li>Fixed paths in shell scripts.
161<li>Fixed filling in of text fields showing class obfuscation dictionary and
162    package obfuscation dictionary from configuration in GUI.
163<li>Worked around Oracle Java 6/7 bug #7027598 that locked the GUI on Linux.
164<li>Updated documentation and examples.
165</ul>
166
167<h3><div>Feb 2011</div> Version 4.6</h3>
168<ul>
169<li>Added support for synthetic, bridge, and varargs modifiers in configuration.
170<li>Added detection of atomic updater construction with constant arguments.
171<li>Fixed merging of package visible classes.
172<li>Fixed optimization of fields that are only accessed by reflection.
173<li>Fixed optimization of read-only or write-only fields that are volatile.
174<li>Fixed handling of side-effects due to static initializers.
175<li>Fixed handling of bridge flags in obfuscation step.
176<li>Fixed handling of super flag when merging classes.
177<li>Fixed updating of variable tables when optimizing variables.
178<li>Fixed removal of unused parameters with 32 or more parameters.
179<li>Fixed incorrect removal of exception handler for instanceof instruction.
180<li>Fixed inlining of methods with unusual exception handlers.
181<li>Fixed optimization of unusual code causing stack underflow.
182<li>Fixed keeping of constructor parameter names.
183<li>Fixed unwanted wrapping of non-standard META-INF files.
184<li>Fixed filtering of warnings about references to array types.
185<li>Fixed overriding of warning option and note option in Ant task.
186<li>Improved detection of file name extensions for canonical paths.
187<li>Improved printing of seeds specified by <code>-keep</code> options.
188<li>Improved printing of notes about unkept classes.
189<li>Improved checking whether output is up to date.
190<li>Updated documentation and examples.
191</ul>
192
193<h3><div>Jun 2010</div> Version 4.5</h3>
194<ul>
195<li>Added option <code>-keepparameternames</code>.
196<li><code>-dontskipnonpubliclibraryclasses</code> is now set by default. Added
197    <code>-skipnonpubliclibraryclasses</code> as an option.
198<li>Made processing independent of order of input classes to get even more
199    deterministic output.
200<li>Improved constant field propagation.
201<li>Improved renaming of resource files in subdirectories of packages.
202<li>Avoiding making fields in interfaces private.
203<li>Optimizing exception handlers for monitorexit instruction.
204<li>Reduced maximum allowed code length after inlining from 8000 bytes to
205    7000 bytes.
206<li>Fixed missing warnings about missing library classes.
207<li>Fixed shrinking of annotations with arrays of length 0.
208<li>Fixed handling of -0.0 and NaN values when simplifying expressions.
209<li>Fixed copying of exception handlers when simplifying tail recursion calls.
210<li>Fixed optimization of introspected fields.
211<li>Fixed simplification of unnecessary variable initializations.
212<li>Fixed evaluation of subroutines in pre-JDK 1.5 code.
213<li>Fixed updating of access flags in inner classes information.
214<li>Fixed disabling of field privatization.
215<li>Fixed invocations of privatized methods.
216<li>Fixed updating of local variable debug information in optimization step.
217<li>Fixed print settings without file name in GUI.
218<li>Fixed field privatization setting in GUI.
219<li>Fixed saving incorrectly quoted arguments in GUI.
220<li>Fixed handling of regular expressions with only negators.
221<li>Fixed unwanted wrapping of non-standard META-INF files.
222<li>Fixed regular expression pattern for constructors in ReTrace.
223<li>Updated documentation and examples.
224</ul>
225
226<h3><div>Jul 2009</div> Version 4.4</h3>
227<ul>
228<li>Added new peephole optimizations.
229<li>Added option <code>-optimizations</code> for fine-grained configuration of
230    optimizations.
231<li>Added option <code>-adaptclassstrings</code> for adapting string constants
232    that correspond to obfuscated classes.
233<li>Added option <code>-keeppackagenames</code> for keeping specified package
234    names from being obfuscated.
235<li>Added option <code>-keepdirectories</code> for keeping specified directory
236    entries in output jars.
237<li>Extended options <code>-dontnote</code> and <code>-dontwarn</code> for
238    fine-grained configuration of notes and warnings. 
239<li>Added option <code>-regex</code> in ReTrace, for specifying alternative
240    regular expressions to parse stack traces.
241<li>Extended renaming of resource files based on obfuscation.
242<li>Improved inlining of constant parameters and removal of unused parameters.
243<li>Avoiding bug in IBM's JVM for JSE, in optimization step.
244<li>Avoiding ArrayIndexOutOfBoundsException in optimization step.
245<li>Fixed configuration with annotations that are not preserved themselves.
246<li>Fixed preverification of invocations of super constructors with arguments
247    containing ternary operators.
248<li>Fixed processing of unreachable exception handlers.
249<li>Fixed merging of exception classes.
250<li>Fixed repeated method inlining.
251<li>Fixed inlining of finally blocks surrounded by large try blocks, compiled
252    with JDK 1.4 or earlier.
253<li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or
254    earlier.
255<li>Fixed obfuscation of anonymous class names, if <code>EnclosingMethod</code>
256    attributes are being kept.
257<li>Fixed obfuscation of inner class names in generic types.
258<li>Fixed decoding of UTF-8 strings containing special characters.
259<li>Fixed copying of debug information and annotations when merging classes.
260<li>Fixed writing out of unknown attributes.
261<li>Fixed updating manifest files with split lines.
262<li>Updated documentation and examples.
263</ul>
264
265<h3><div>Dec 2008</div> Version 4.3</h3>
266<ul>
267<li>Added class merging.
268<li>Added static single assignment analysis.
269<li>Added support for annotation and enumeration class types in configuration.
270<li>Refined shrinking of fields in case of unusual
271    <code>-keepclassmembers</code> options.
272<li>Added simplification of tail recursion calls.
273<li>Added new peephole optimizations.
274<li>Fixed optimization of unused variable initializations causing negative
275    stack sizes.
276<li>Fixed optimization of unusual initialization code causing
277    NullPointerExceptions.
278<li>Fixed optimization of half-used long and double parameters.
279<li>Fixed processing of complex generics signatures.
280<li>Working around suspected java compiler bug with parameter annotations on
281    constructors of non-static inner classes.
282<li>Fixed obfuscation of classes with inner classes whose names are preserved.
283<li>Fixed access of protected methods in repackaged classes.
284<li>Added options <code>-classobfuscationdictionary</code> and
285    <code>-packageobfuscationdictionary</code>.
286<li>Adapting more types of resource file names based on obfuscation.
287<li>Extended warnings about incorrect dependencies.
288<li>Added start-up scripts and build scripts.
289<li>Updated documentation and examples.
290</ul>
291
292<h3><div>Mar 2008</div> Version 4.2</h3>
293<ul>
294<li>Refined data flow analysis in optimization step.
295<li>Fixed handling of exceptions when inlining subroutines.
296<li>Fixed inlining of incompatible code constructs between different java
297    versions.
298<li>Fixed computation of local variable frame size.
299<li>Fixed optimization of infinite loops.
300<li>Fixed optimization of subroutine invocations.
301<li>Fixed optimization of floating point remainder computations.
302<li>Fixed removal of unused parameters in method descriptors containing arrays
303    of longs or doubles.
304<li>Added undocumented java system properties
305    <code>maximum.inlined.code.length</code> (default is 8) and
306    <code>maximum.resulting.code.length</code> (defaults are 8000 for JSE and
307    2000 for JME), for expert users who read release notes.
308<li>Fixed processing of generic types in Signature attributes in shrinking and
309    optimization steps.
310<li>Fixed processing of inner class names in Signature attributes in obfuscation
311    step.
312<li>Improved adapting resource file names following obfuscated class names.
313<li>Fixed interpretation of package names in GUI.
314<li>Fixed default settings for Xlets in GUI.
315<li>Updated documentation and examples.
316</ul>
317
318<h3><div>Dec 2007</div> Version 4.1</h3>
319<ul>
320<li>Fixed shrinking of default annotation element values.
321<li>Fixed optimization of invocations of methods in same class that are
322    accessed through extensions.
323<li>Fixed optimization of invocations of synchronized methods without other
324    side-effects.
325<li>Fixed optimization of some non-returning subroutines.
326<li>Fixed handling of local variable debug information when inlining methods.
327<li>Avoiding StackOverflowErrors during optimization of complex methods.
328<li>Fixed obfuscation of potentially ambiguous non-primitive constants in
329    interfaces.
330<li>Fixed preverification of some code constructs involving String, Class, and
331    exception types.
332<li>The Ant task now allows empty <code>&lt;injars&gt;</code> and
333    <code>&lt;libraryjars&gt;</code> elements.
334<li>Updated documentation and examples.
335</ul>
336
337<h3><div>Sep 2007</div> Version 4.0</h3>
338<ul>
339<li>Added preverifier for Java 6 and Java Micro Edition, with new options
340    <code>-microedition</code> and <code>-dontpreverify</code>.
341<li>Added new option <code>-target</code> to modify java version of processed
342    class files.
343<li>Made <code>-keep</code> options more orthogonal and flexible, with option
344    modifiers <code>allowshrinking</code>, <code>allowoptimization</code>, and
345    <code>allowobfuscation</code>.
346<li>Added new wildcards for class member descriptors: "<code>***</code>",
347    matching any type, and "<code>...</code>", matching any number of
348    arguments.
349<li>Added support for configuration by means of annotations.
350<li>Improved shrinking of unused annotations.
351<li>Added check on modification times of input and output, to avoid unnecessary
352    processing, with new option <code>-forceprocessing</code>.
353<li>Added new options <code>-flattenpackagehierarchy</code> and
354    <code>-repackageclasses</code> (replacing <code>-defaultpackage</code>) to
355    control obfuscation of package names.
356<li>Added new options <code>-adaptresourcefilenames</code> and
357    <code>-adaptresourcefilecontents</code>, with file filters, to update
358    resource files corresponding to obfuscated class names.
359<li>Added detection of dynamically accessed fields and methods.
360<li>Now treating <code>Exceptions</code> attributes as optional.
361<li>Now respecting naming rule for nested class names
362    (<code>EnclosingClass$InnerClass</code>) in obfuscation step, if
363    <code>InnerClasses</code> attributes or <code>EnclosingMethod</code>
364    attributes are being kept.
365<li>Added new inter-procedural optimizations: method inlining and propagation
366    of constant fields, constant arguments, and constant return values.
367<li>Added optimized local variable allocation.
368<li>Added more than 250 new peephole optimizations.
369<li>Improved making classes and class members public or protected.
370<li>Now printing notes on suspiciously unkept classes in parameters of
371    specified methods.
372<li>Now printing notes for class names that don't seem to be fully qualified.
373<li>Added support for uppercase filename extensions.
374<li>Added tool tips to the GUI.
375<li>Rewritten class file I/O code.
376<li>Updated documentation and examples.
377</ul>
378Upgrade considerations:
379<ul>
380
381<li>Since ProGuard now treats the <code>Exceptions</code> attribute as
382    optional, you may have to specify <code>-keepattributes Exceptions</code>,
383    notably when processing code that is to be used as a library.
384
385<li>ProGuard now preverifies code for Java Micro Edition, if you specify the
386    option <code>-microedition</code>. You then no longer need to process the
387    code with an external preverifier.
388
389<li>You should preferably specify <code>-repackageclasses</code> instead of the
390    old option name <code>-defaultpackage</code>.
391</ul>
392
393<h3><div>Dec 2007</div> Version 3.11</h3>
394<ul>
395<li>Fixed optimization of invocations of methods in same class that are
396    accessed through extensions.
397<li>Fixed optimization of invocations of synchronized methods without other
398    side-effects.
399<li>Updated documentation and examples.
400</ul>
401
402<h3><div>Aug 2007</div> Version 3.10</h3>
403<ul>
404<li>Now handling mixed-case input class names when
405    <code>-dontusemixedcaseclassnames</code> is specified.
406<li>Fixed optimization of synchronization on classes, as compiled by Eclipse
407    and Jikes.
408<li>Fixed optimization of switch statements with unreachable cases.
409<li>Avoiding merging subsequent identically named files.
410<li>Updated documentation and examples.
411</ul>
412
413<h3><div>Jun 2007</div> Version 3.9</h3>
414<ul>
415<li>Fixed processing of .class constructs in Java 6.
416<li>Fixed repeated processing of .class constructs.
417<li>Fixed possible division by 0 in optimization step.
418<li>Fixed handling of variable instructions with variable indices larger than
419    255.
420<li>Updated documentation and examples.
421</ul>
422
423<h3><div>Mar 2007</div> Version 3.8</h3>
424<ul>
425<li>Fixed optimization of parameters used as local variables.
426<li>Fixed obfuscation with conflicting class member names.
427<li>Fixed incremental obfuscation with incomplete mapping file for library jars.
428<li>Updated documentation and examples.
429</ul>
430
431<h3><div>Dec 2006</div> Version 3.7</h3>
432<ul>
433<li>Now accepting Java 6 class files.
434<li>Fixed shrinking of partially used annotations.
435<li>Improved incremental obfuscation, with new option
436    <code>-useuniqueclassmembernames</code>.
437<li>Printing more information in case of conflicting configuration and input.
438<li>Fixed optimization of repeated array length instruction.
439<li>Fixed optimization of subsequent try/catch/finally blocks with return
440    statements.
441<li>Fixed optimization of complex stack operations.
442<li>Fixed optimization of simple infinite loops.
443<li>Fixed optimization of expressions with constant doubles.
444<li>Tuned optimization to improve size reduction after preverification.
445<li>Fixed overflows of offsets in long code blocks.
446<li>Now allowing class names containing dashes.
447<li>Updated documentation and examples.
448</ul>
449
450<h3><div>May 2006</div> Version 3.6</h3>
451<ul>
452<li>No longer automatically keeping classes in parameters of specified methods
453    from obfuscation and optimization (introduced in version 3.4).
454<li>Fixed inlining of interfaces that are used in .class constructs.
455<li>Fixed removal of busy-waiting loops reading volatile fields.
456<li>Fixed optimization of comparisons of known integers.
457<li>Fixed optimization of known branches.
458<li>Fixed optimization of method calls on arrays of interfaces.
459<li>Fixed optimization of method calls without side-effects.
460<li>Fixed optimization of nested try/catch/finally blocks with return
461    statements.
462<li>Fixed initialization of library classes that only appear in descriptors.
463<li>Fixed matching of primitive type wildcards in configuration.
464<li>Fixed the boilerplate specification for enumerations in the GUI.
465<li>Updated documentation and examples.
466</ul>
467
468<h3><div>Jan 2006</div> Version 3.5</h3>
469<ul>
470<li>Fixed obfuscation of class members with complex visibility.
471<li>Fixed optimization bugs causing stack verification errors.
472<li>Fixed optimization bug causing overridden methods to be finalized.
473<li>Fixed optimization bug causing abstract method errors for retro-fitted
474    library methods.
475<li>Fixed optimization bug evaluating code with constant long values.
476<li>Fixed bug in updating of optional local variable table attributes and local
477    variable type table attributes after optimization.
478<li>Fixed interpretation of comma-separated class names without wildcards.
479<li>Updated documentation and examples.
480</ul>
481
482<h3><div>Oct 2005</div> Version 3.4</h3>
483<ul>
484<li>Extended optimizations: removing duplicate code within methods.
485<li>Extended regular expressions for class names to comma-separated lists.
486<li>Now automatically keeping classes in descriptors of kept class members.
487<li>Added verbose statistics for optimizations.
488<li>Added boilerplate Number optimizations in GUI.
489<li>Fixed <code>Class.forName</code> detection.
490<li>Fixed incremental obfuscation bug.
491<li>Fixed optimization bug causing stack verification errors.
492<li>Fixed optimization bugs related to removal of unused parameters.
493<li>Fixed exception when optimizing code with many local variables.
494<li>Fixed exception when saving configuration with initializers in GUI.
495<li>Updated documentation and examples.
496</ul>
497
498<h3><div>Jun 2005</div> Version 3.3</h3>
499<ul>
500<li>Extended optimizations: making methods private and static when possible,
501    making classes static when possible, removing unused parameters.
502<li>Made file names relative to the configuration files in which they are
503    specified. Added <code>-basedirectory</code> option.
504<li>Added <code>-whyareyoukeeping</code> option to get details on why given
505    classes and class members are being kept.
506<li>Added warnings for misplaced class files.
507<li>Improved printing of notes for <code>Class.forName</code> constructs.
508<li>Implemented '<code>assumenosideeffects</code>' nested element in Ant task.
509<li>Improved processing of annotations.
510<li>Fixed reading and writing of parameter annotations.
511<li>Fixed various optimization bugs.
512<li>Fixed wildcards not matching '-' character.
513<li>Fixed wildcard bug and checkbox bugs in GUI.
514<li>Setting file chooser defaults in GUI.
515<li>Leaving room for growBox in GUI on Mac OS X.
516<li>Properly closing configuration files.
517<li>Updated documentation and examples.
518</ul>
519
520<h3><div>Dec 2004</div> Version 3.2</h3>
521<ul>
522<li>Fixed JDK5.0 processing bugs.
523<li>Fixed optimization bugs.
524<li>Fixed relative paths in Ant task.
525<li>Improved speed of shrinking step.
526<li>Updated documentation and examples.
527</ul>
528
529<h3><div>Nov 2004</div> Version 3.1</h3>
530<ul>
531<li>Improved obfuscation and shrinking of private class members.
532<li>Added inlining of interfaces with single implementations.
533<li>Added option to specify obfuscation dictionary.
534<li>Added option to read package visible library class members.
535<li>Extended support for JDK5.0 attributes.
536<li>Fixed various optimization bugs.
537<li>Modified Ant task to accept paths instead of filesets.
538<li>Fixed two Ant task bugs.
539<li>Updated documentation and examples.
540</ul>
541
542<h3><div>Aug 2004</div> Version 3.0</h3>
543<ul>
544<li>Added bytecode optimization step, between shrinking step and obfuscation
545    step.
546<li>Generalized filtered recursive reading and writing of jars, wars, ears,
547    zips, and directories.
548<li>Added support for grouping input and output jars, wars, ears, zips, and
549    directories.
550<li>Added support for applying mapping files to library classes.
551<li>Removed <code>-resourcejars</code> option. Resources should now be read
552    using regular <code>-injars</code> options, using filters if necessary.
553<li>Rewrote Ant task. Input and output modification dates are not checked at
554    the moment. Minor changes in XML schema:
555    <ul>
556    <li>Filters now specified using attributes.
557    <li>'<code>outjars</code>' now nested element instead of attribute.
558    <li>'<code>type</code>' attribute of <code>&lt;method&gt;</code> element no
559        longer defaults to '<code>void</code>'.
560    <li><code>&lt;</code> and <code>&gt;</code> characters now have to be
561        encoded in embedded configurations.
562    <li><code>&lt;proguardconfiguration&gt;</code> task no longer accepts
563        attributes.
564    </ul>
565<li>Updated J2ME WTK plugin, now customizable through configuration file.
566<li>Updated GUI.
567<li>Fixed various processing bugs.
568<li>Fixed ReTrace parsing bugs.
569<li>Improved jar compression.
570<li>Updated documentation and examples.
571</ul>
572
573<h3><div>Mar 2004</div> Version 2.1</h3>
574<ul>
575<li>Added support for JDK1.5 classes.
576<li>Added additional wildcard for matching primitive types.
577<li>Added possibility to switch off notes about duplicate class definitions.
578<li>Fixed use of multiple filters on output jars.
579<li>Fixed option to keep all attributes.
580<li>Fixed various Ant task bugs.
581<li>Updated documentation and examples.
582</ul>
583
584<h3><div>Dec 2003</div> Version 2.0</h3>
585<ul>
586<li>Added a graphical user interface for ProGuard and ReTrace.
587<li>Added <code>-applymapping</code> option for incremental obfuscation.
588<li>Added support for filtering input and output files.
589<li>Added support for the J++ <code>SourceDir</code> attribute.
590<li>Improved detection of <code>.class</code> constructs.
591<li>Improved handling of misplaced manifest files.
592<li>Improved implementation of ReTrace.
593<li>Worked around String UTF-8 encoding bug affecting foreign characters.
594<li>Fixed exception when ignoring warnings.
595<li>Fixed various Ant task bugs.
596<li>Updated documentation and examples.
597</ul>
598
599<h3><div>Aug 2003</div> Version 1.7</h3>
600<ul>
601<li>Fixed various Ant task bugs.
602<li>Fixed ClassCastException due to explicitly used abstract classes with
603    implicitly used interfaces targeted at JRE1.2 (the default in JDK1.4).
604<li>Fixed <code>-defaultpackage</code> bug for protected classes and class
605    members.
606<li>Fixed ReTrace bug when retracing without line number tables.
607<li>Worked around zip package problems with duplicate out entries and rogue
608    manifest files.
609<li>Added work-around for handling malformed legacy interface class files.
610<li>Updated documentation and examples.
611</ul>
612
613<h3><div>May 2003</div> Version 1.6</h3>
614<ul>
615<li>Added support for Ant.
616<li>Added support for the J2ME Wireless Toolkit.
617<li>Added support for reading and writing directory hierarchies.
618<li>Added option for specifying resource jars and directories.
619<li>Added support for wildcards in class member specifications.
620<li>Improved handling of the <code>-defaultpackage</code> option.
621<li>Improved stack trace parsing in ReTrace tool.
622<li>Fixed processing of libraries containing public as well as non-public
623    extensions of non-public classes.
624<li>Fixed examples for processing libraries, midlets, and serializable code.
625<li>Updated documentation and examples.
626</ul>
627
628<h3><div>Jan 2003</div> Version 1.5</h3>
629<ul>
630<li>Fixed processing of retrofitted library interfaces.
631<li>Fixed processing of <code>.class</code> constructs in internal classes
632    targeted at JRE1.2 (the default in JDK1.4).
633<li>Fixed <code>-dump</code> option when <code>-outjar</code> option is not
634    present.
635<li>Updated documentation and examples.
636</ul>
637
638<h3><div>Nov 2002</div> Version 1.4</h3>
639<ul>
640<li>Now copying resource files over from the input jars to the output jar.
641<li>Added option to obfuscate using lower-case class names only.
642<li>Added better option for obfuscating native methods.
643<li>Added option not to ignore non-public library classes.
644<li>Added automatic <code>.class</code> detection for classes compiled with
645    Jikes.
646<li>Updated documentation and examples.
647</ul>
648
649<h3><div>Sep 2002</div> Version 1.3</h3>
650<ul>
651<li>Added support for wildcards in class names.
652<li>Added tool to de-obfuscate stack traces.
653<li>Added options to print processing information to files.
654<li>Added option to rename source file attributes.
655<li>Fixed processing of implicitly used interfaces targeted at JRE1.2 (the
656    default in JDK1.4)
657<li>Fixed processing of configurations with negated access modifiers.
658<li>Fixed duplicate class entry bug.
659<li>Updated documentation and examples.
660</ul>
661
662<h3><div>Aug 2002</div> Version 1.2</h3>
663<ul>
664<li>Improved speed.
665<li>Fixed processing of classes targeted at JRE1.2 (the default in JDK1.4)
666    with references to their own subclasses.
667<li>Fixed processing of static initializers in J2ME MIDP applications.
668<li>Fixed processing of retrofitted interfaces (again).
669<li>Added more flexible handling of white space in configuration.
670<li>Updated documentation.
671</ul>
672
673<h3><div>Jul 2002</div> Version 1.1</h3>
674<ul>
675<li>Added automatic detection of <code>Class.forName("MyClass")</code>,
676    <code>MyClass.class</code>, and
677    <code>(MyClass)Class.forName(variable).newInstance()</code> constructs.
678    This greatly simplifies configuration.
679<li>Added options to keep class names and class member names without affecting
680    any shrinking. They are mostly useful for native methods and serializable
681    classes.
682<li>Fixed processing of retrofitted interfaces.
683<li>Added handling of missing/invalid manifest file in input jar.
684<li>Updated documentation and examples.
685</ul>
686
687<h3><div>Jun 2002</div> Version 1.0</h3>
688<ul>
689<li>First public release, based on class parsing code from Mark Welsh's
690    <b>RetroGuard</b>.
691</ul>
692
693<hr />
694<noscript><div><a target="_top" href="index.html" class="button">Show menu</a></div></noscript>
695<address>
696Copyright &copy; 2002-2013
697<a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
698</address>
699
700</body>
701</html>
702