Home | History | Annotate | Download | only in docs
      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 <!--
     11 if (window.self==window.top)
     12   window.top.location.replace("index.html#"+window.location.pathname+window.location.hash);
     13 else {
     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
     26 License. Please consult the <a href="license.html">license page</a> for more
     27 details.
     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>
     32 You can download the latest release (containing the program jars, the
     33 documentation that you're reading now, examples, and the source code) from this
     34 location:
     35 <p>
     36 <center><a href="http://sourceforge.net/projects/proguard/files/"
     37 target="other">Download section at SourceForge</a></center>
     38 <p>
     39 
     40 The <a href="http://sourceforge.net/projects/proguard/files/proguard/"
     41 target="other">proguard</a> section contains major releases and updates with
     42 sub-minor version numbers, for applying emergency fixes. The
     43 <a href="http://sourceforge.net/projects/proguard/files/proguard%20beta/"
     44 target="other">proguard beta</a> section contains beta releases. These include
     45 new features and any less urgent bug fixes collected since the previous
     46 release.
     47 <p>
     48 If you're still working with an older version of <b>ProGuard</b>, check out
     49 the summary of changes below, to see if you're missing something essential.
     50 Better look at the up-to-date <a
     51 href="http://proguard.sourceforge.net/downloads.html">on-line version</a> if
     52 you'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
     54 update.
     55 <p>
     56 If you're only interested in individual jar files for your build process, you
     57 can 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"
     59 target="other">net.sf.proguard</a> and ArtifactIds
     60 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-parent%22"
     61 target="other">proguard-parent</a>,
     62 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-base%22"
     63 target="other">proguard-base</a>,
     64 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-gui%22"
     65 target="other">proguard-gui</a>,
     66 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-anttask%22"
     67 target="other">proguard-anttask</a>,
     68 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-gradle%22"
     69 target="other">proguard-gradle</a>,
     70 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-wtk-plugin%22"
     71 target="other">proguard-wtk-plugin</a>, and
     72 <a href="http://search.maven.org/#search|ga|1|a:%22proguard-retrace%22"
     73 target="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>
    378 Upgrade 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>
    696 Copyright &copy; 2002-2013
    697 <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>.
    698 </address>
    699 
    700 </body>
    701 </html>
    702