| |
| <!doctype html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
| <html> |
| <head> |
| <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> |
| <meta http-equiv="content-style-type" content="text/css"> |
| <link rel="stylesheet" type="text/css" href="style.css"> |
| <title>ProGuard Downloads</title> |
| </head> |
| <body> |
| |
| <h2>Downloads</h2> |
| |
| <b>ProGuard</b> is distributed under the terms of the GNU General Public |
| License. Please consult the <a href="license.html">license page</a> for more |
| details. |
| <p> |
| <b>ProGuard</b> is written in Java, so it requires a Java Runtime Environment |
| (JRE 1.4 or higher). |
| <p> |
| You can download the latest release (containing the program jar, the |
| documentation you're reading now, examples, and the source code) from this |
| location: |
| <p> |
| <center><a href="http://sourceforge.net/project/showfiles.php?group_id=54750" |
| target="other">Download section</a> (at <a |
| href="http://sourceforge.net/projects/proguard/" |
| target="other">SourceForge</a>)</center> |
| <p> |
| |
| If you're still working with an older version of <b>ProGuard</b>, check out |
| the summary of changes below, to see if you're missing something essential. |
| Better look at the up-to-date <a |
| href="http://proguard.sourceforge.net/downloads.html">on-line version</a> if |
| you're reading a local copy of this page. |
| <p> |
| The download section may also contain updates with sub-minor version numbers. |
| These versions are typically released shortly after their parent versions, for |
| applying emergency fixes. Please make sure to look at those if you are |
| encountering any problems with recent releases. |
| <p> |
| Finally, there may be beta versions of upcoming releases. They may be of |
| interest too, because they typically contain any less urgent bug fixes |
| collected since the previous release. |
| <p> |
| |
| <h3><div>Jul 2009</div> Version 4.4</h3> |
| <ul> |
| <li>Added new peephole optimizations. |
| <li>Added option <code>-optimizations</code> for fine-grained configuration of |
| optimizations. |
| <li>Added option <code>-adaptclassstrings</code> for adapting string constants |
| that correspond to obfuscated classes. |
| <li>Added option <code>-keeppackagenames</code> for keeping specified package |
| names from being obfuscated. |
| <li>Added option <code>-keepdirectories</code> for keeping specified directory |
| entries in output jars. |
| <li>Extended options <code>-dontnote</code> and <code>-dontwarn</code> for |
| fine-grained configuration of notes and warnings. |
| <li>Added option <code>-regex</code> in ReTrace, for specifying alternative |
| regular expressions to parse stack traces. |
| <li>Extended renaming of resource files based on obfuscation. |
| <li>Improved inlining of constant parameters and removal of unused parameters. |
| <li>Avoiding bug in IBM's JVM for JSE, in optimization step. |
| <li>Avoiding ArrayIndexOutOfBoundsException in optimization step. |
| <li>Fixed configuration with annotations that are not preserved themselves. |
| <li>Fixed preverification of invocations of super constructors with arguments |
| containing ternary operators. |
| <li>Fixed processing of unreachable exception handlers. |
| <li>Fixed merging of exception classes. |
| <li>Fixed repeated method inlining. |
| <li>Fixed inlining of finally blocks surrounded by large try blocks, compiled |
| with JDK 1.4 or earlier. |
| <li>Fixed optimization of complex finally blocks, compiled with JDK 1.4 or |
| earlier. |
| <li>Fixed obfuscation of anonymous class names, if <code>EnclosingMethod</code> |
| attributes are being kept. |
| <li>Fixed obfuscation of inner class names in generic types. |
| <li>Fixed decoding of UTF-8 strings containing special characters. |
| <li>Fixed copying of debug information and annotations when merging classes. |
| <li>Fixed writing out of unknown attributes. |
| <li>Fixed updating manifest files with split lines. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Dec 2008</div> Version 4.3</h3> |
| <ul> |
| <li>Added class merging. |
| <li>Added static single assignment analysis. |
| <li>Added support for annotation and enumeration class types in configuration. |
| <li>Refined shrinking of fields in case of unusual |
| <code>-keepclassmembers</code> options. |
| <li>Added simplification of tail recursion calls. |
| <li>Added new peephole optimizations. |
| <li>Fixed optimization of unused variable initializations causing negative |
| stack sizes. |
| <li>Fixed optimization of unusual initialization code causing |
| NullPointerExceptions. |
| <li>Fixed optimization of half-used long and double parameters. |
| <li>Fixed processing of complex generics signatures. |
| <li>Working around suspected java compiler bug with parameter annotations on |
| constructors of non-static inner classes. |
| <li>Fixed obfuscation of classes with inner classes whose names are preserved. |
| <li>Fixed access of protected methods in repackaged classes. |
| <li>Added options <code>-classobfuscationdictionary</code> and |
| <code>-packageobfuscationdictionary</code>. |
| <li>Adapting more types of resource file names based on obfuscation. |
| <li>Extended warnings about incorrect dependencies. |
| <li>Added start-up scripts and build scripts. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Mar 2008</div> Version 4.2</h3> |
| <ul> |
| <li>Refined data flow analysis in optimization step. |
| <li>Fixed handling of exceptions when inlining subroutines. |
| <li>Fixed inlining of incompatible code constructs between different java |
| versions. |
| <li>Fixed computation of local variable frame size. |
| <li>Fixed optimization of infinite loops. |
| <li>Fixed optimization of subroutine invocations. |
| <li>Fixed optimization of floating point remainder computations. |
| <li>Fixed removal of unused parameters in method descriptors containing arrays |
| of longs or doubles. |
| <li>Added undocumented java system properties |
| <code>maximum.inlined.code.length</code> (default is 8) and |
| <code>maximum.resulting.code.length</code> (defaults are 8000 for JSE and |
| 2000 for JME), for expert users who read release notes. |
| <li>Fixed processing of generic types in Signature attributes in shrinking and |
| optimization steps. |
| <li>Fixed processing of inner class names in Signature attributes in obfuscation |
| step. |
| <li>Improved adapting resource file names following obfuscated class names. |
| <li>Fixed interpretation of package names in GUI. |
| <li>Fixed default settings for Xlets in GUI. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Dec 2007</div> Version 4.1</h3> |
| <ul> |
| <li>Fixed shrinking of default annotation element values. |
| <li>Fixed optimization of invocations of methods in same class that are |
| accessed through extensions. |
| <li>Fixed optimization of invocations of synchronized methods without other |
| side-effects. |
| <li>Fixed optimization of some non-returning subroutines. |
| <li>Fixed handling of local variable debug information when inlining methods. |
| <li>Avoiding StackOverflowErrors during optimization of complex methods. |
| <li>Fixed obfuscation of potentially ambiguous non-primitive constants in |
| interfaces. |
| <li>Fixed preverification of some code constructs involving String, Class, and |
| exception types. |
| <li>The Ant task now allows empty <code><injars></code> and |
| <code><libraryjars></code> elements. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Sep 2007</div> Version 4.0</h3> |
| <ul> |
| <li>Added preverifier for Java 6 and Java Micro Edition, with new options |
| <code>-microedition</code> and <code>-dontpreverify</code>. |
| <li>Added new option <code>-target</code> to modify java version of processed |
| class files. |
| <li>Made <code>-keep</code> options more orthogonal and flexible, with option |
| modifiers <code>allowshrinking</code>, <code>allowoptimization</code>, and |
| <code>allowobfuscation</code>. |
| <li>Added new wildcards for class member descriptors: "<code>***</code>", |
| matching any type, and "<code>...</code>", matching any number of |
| arguments. |
| <li>Added support for configuration by means of annotations. |
| <li>Improved shrinking of unused annotations. |
| <li>Added check on modification times of input and output, to avoid unnecessary |
| processing, with new option <code>-forceprocessing</code>. |
| <li>Added new options <code>-flattenpackagehierarchy</code> and |
| <code>-repackageclasses</code> (replacing <code>-defaultpackage</code>) to |
| control obfuscation of package names. |
| <li>Added new options <code>-adaptresourcefilenames</code> and |
| <code>-adaptresourcefilecontents</code>, with file filters, to update |
| resource files corresponding to obfuscated class names. |
| <li>Added detection of dynamically accessed fields and methods. |
| <li>Now treating <code>Exceptions</code> attributes as optional. |
| <li>Now respecting naming rule for nested class names |
| (<code>EnclosingClass$InnerClass</code>) in obfuscation step, if |
| <code>InnerClasses</code> attributes or <code>EnclosingMethod</code> |
| attributes are being kept. |
| <li>Added new inter-procedural optimizations: method inlining and propagation |
| of constant fields, constant arguments, and constant return values. |
| <li>Added optimized local variable allocation. |
| <li>Added more than 250 new peephole optimizations. |
| <li>Improved making classes and class members public or protected. |
| <li>Now printing notes on suspiciously unkept classes in parameters of |
| specified methods. |
| <li>Now printing notes for class names that don't seem to be fully qualified. |
| <li>Added support for uppercase filename extensions. |
| <li>Added tool tips to the GUI. |
| <li>Rewritten class file I/O code. |
| <li>Updated documentation and examples. |
| </ul> |
| Upgrade considerations: |
| <ul> |
| |
| <li>Since ProGuard now treats the <code>Exceptions</code> attribute as |
| optional, you may have to specify <code>-keepattributes Exceptions</code>, |
| notably when processing code that is to be used as a library. |
| |
| <li>ProGuard now preverifies code for Java Micro Edition, if you specify the |
| option <code>-microedition</code>. You then no longer need to process the |
| code with an external preverifier. |
| |
| <li>You should preferably specify <code>-repackageclasses</code> instead of the |
| old option name <code>-defaultpackage</code>. |
| </ul> |
| |
| <h3><div>Dec 2007</div> Version 3.11</h3> |
| <ul> |
| <li>Fixed optimization of invocations of methods in same class that are |
| accessed through extensions. |
| <li>Fixed optimization of invocations of synchronized methods without other |
| side-effects. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Aug 2007</div> Version 3.10</h3> |
| <ul> |
| <li>Now handling mixed-case input class names when |
| <code>-dontusemixedcaseclassnames</code> is specified. |
| <li>Fixed optimization of synchronization on classes, as compiled by Eclipse |
| and Jikes. |
| <li>Fixed optimization of switch statements with unreachable cases. |
| <li>Avoiding merging subsequent identically named files. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Jun 2007</div> Version 3.9</h3> |
| <ul> |
| <li>Fixed processing of .class constructs in Java 6. |
| <li>Fixed repeated processing of .class constructs. |
| <li>Fixed possible division by 0 in optimization step. |
| <li>Fixed handling of variable instructions with variable indices larger than |
| 255. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Mar 2007</div> Version 3.8</h3> |
| <ul> |
| <li>Fixed optimization of parameters used as local variables. |
| <li>Fixed obfuscation with conflicting class member names. |
| <li>Fixed incremental obfuscation with incomplete mapping file for library jars. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Dec 2006</div> Version 3.7</h3> |
| <ul> |
| <li>Now accepting Java 6 class files. |
| <li>Fixed shrinking of partially used annotations. |
| <li>Improved incremental obfuscation, with new option |
| <code>-useuniqueclassmembernames</code>. |
| <li>Printing more information in case of conflicting configuration and input. |
| <li>Fixed optimization of repeated array length instruction. |
| <li>Fixed optimization of subsequent try/catch/finally blocks with return |
| statements. |
| <li>Fixed optimization of complex stack operations. |
| <li>Fixed optimization of simple infinite loops. |
| <li>Fixed optimization of expressions with constant doubles. |
| <li>Tuned optimization to improve size reduction after preverification. |
| <li>Fixed overflows of offsets in long code blocks. |
| <li>Now allowing class names containing dashes. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>May 2006</div> Version 3.6</h3> |
| <ul> |
| <li>No longer automatically keeping classes in parameters of specified methods |
| from obfuscation and optimization (introduced in version 3.4). |
| <li>Fixed inlining of interfaces that are used in .class constructs. |
| <li>Fixed removal of busy-waiting loops reading volatile fields. |
| <li>Fixed optimization of comparisons of known integers. |
| <li>Fixed optimization of known branches. |
| <li>Fixed optimization of method calls on arrays of interfaces. |
| <li>Fixed optimization of method calls without side-effects. |
| <li>Fixed optimization of nested try/catch/finally blocks with return |
| statements. |
| <li>Fixed initialization of library classes that only appear in descriptors. |
| <li>Fixed matching of primitive type wildcards in configuration. |
| <li>Fixed the boilerplate specification for enumerations in the GUI. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Jan 2006</div> Version 3.5</h3> |
| <ul> |
| <li>Fixed obfuscation of class members with complex visibility. |
| <li>Fixed optimization bugs causing stack verification errors. |
| <li>Fixed optimization bug causing overridden methods to be finalized. |
| <li>Fixed optimization bug causing abstract method errors for retro-fitted |
| library methods. |
| <li>Fixed optimization bug evaluating code with constant long values. |
| <li>Fixed bug in updating of optional local variable table attributes and local |
| variable type table attributes after optimization. |
| <li>Fixed interpretation of comma-separated class names without wildcards. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Oct 2005</div> Version 3.4</h3> |
| <ul> |
| <li>Extended optimizations: removing duplicate code within methods. |
| <li>Extended regular expressions for class names to comma-separated lists. |
| <li>Now automatically keeping classes in descriptors of kept class members. |
| <li>Added verbose statistics for optimizations. |
| <li>Added boilerplate Number optimizations in GUI. |
| <li>Fixed <code>Class.forName</code> detection. |
| <li>Fixed incremental obfuscation bug. |
| <li>Fixed optimization bug causing stack verification errors. |
| <li>Fixed optimization bugs related to removal of unused parameters. |
| <li>Fixed exception when optimizing code with many local variables. |
| <li>Fixed exception when saving configuration with initializers in GUI. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Jun 2005</div> Version 3.3</h3> |
| <ul> |
| <li>Extended optimizations: making methods private and static when possible, |
| making classes static when possible, removing unused parameters. |
| <li>Made file names relative to the configuration files in which they are |
| specified. Added <code>-basedirectory</code> option. |
| <li>Added <code>-whyareyoukeeping</code> option to get details on why given |
| classes and class members are being kept. |
| <li>Added warnings for misplaced class files. |
| <li>Improved printing of notes for <code>Class.forName</code> constructs. |
| <li>Implemented '<code>assumenosideeffects</code>' nested element in Ant task. |
| <li>Improved processing of annotations. |
| <li>Fixed reading and writing of parameter annotations. |
| <li>Fixed various optimization bugs. |
| <li>Fixed wildcards not matching '-' character. |
| <li>Fixed wildcard bug and checkbox bugs in GUI. |
| <li>Setting file chooser defaults in GUI. |
| <li>Leaving room for growBox in GUI on Mac OS X. |
| <li>Properly closing configuration files. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Dec 2004</div> Version 3.2</h3> |
| <ul> |
| <li>Fixed JDK5.0 processing bugs. |
| <li>Fixed optimization bugs. |
| <li>Fixed relative paths in Ant task. |
| <li>Improved speed of shrinking step. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Nov 2004</div> Version 3.1</h3> |
| <ul> |
| <li>Improved obfuscation and shrinking of private class members. |
| <li>Added inlining of interfaces with single implementations. |
| <li>Added option to specify obfuscation dictionary. |
| <li>Added option to read package visible library class members. |
| <li>Extended support for JDK5.0 attributes. |
| <li>Fixed various optimization bugs. |
| <li>Modified Ant task to accept paths instead of filesets. |
| <li>Fixed two Ant task bugs. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Aug 2004</div> Version 3.0</h3> |
| <ul> |
| <li>Added bytecode optimization step, between shrinking step and obfuscation |
| step. |
| <li>Generalized filtered recursive reading and writing of jars, wars, ears, |
| zips, and directories. |
| <li>Added support for grouping input and output jars, wars, ears, zips, and |
| directories. |
| <li>Added support for applying mapping files to library classes. |
| <li>Removed <code>-resourcejars</code> option. Resources should now be read |
| using regular <code>-injars</code> options, using filters if necessary. |
| <li>Rewrote Ant task. Input and output modification dates are not checked at |
| the moment. Minor changes in XML schema: |
| <ul> |
| <li>Filters now specified using attributes. |
| <li>'<code>outjars</code>' now nested element instead of attribute. |
| <li>'<code>type</code>' attribute of <code><method></code> element no |
| longer defaults to '<code>void</code>'. |
| <li><code><</code> and <code>></code> characters now have to be |
| encoded in embedded configurations. |
| <li><code><proguardconfiguration></code> task no longer accepts |
| attributes. |
| </ul> |
| <li>Updated J2ME WTK plugin, now customizable through configuration file. |
| <li>Updated GUI. |
| <li>Fixed various processing bugs. |
| <li>Fixed ReTrace parsing bugs. |
| <li>Improved jar compression. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Mar 2004</div> Version 2.1</h3> |
| <ul> |
| <li>Added support for JDK1.5 classes. |
| <li>Added additional wildcard for matching primitive types. |
| <li>Added possibility to switch off notes about duplicate class definitions. |
| <li>Fixed use of multiple filters on output jars. |
| <li>Fixed option to keep all attributes. |
| <li>Fixed various Ant task bugs. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Dec 2003</div> Version 2.0</h3> |
| <ul> |
| <li>Added a graphical user interface for ProGuard and ReTrace. |
| <li>Added <code>-applymapping</code> option for incremental obfuscation. |
| <li>Added support for filtering input and output files. |
| <li>Added support for the J++ <code>SourceDir</code> attribute. |
| <li>Improved detection of <code>.class</code> constructs. |
| <li>Improved handling of misplaced manifest files. |
| <li>Improved implementation of ReTrace. |
| <li>Worked around String UTF-8 encoding bug affecting foreign characters. |
| <li>Fixed exception when ignoring warnings. |
| <li>Fixed various Ant task bugs. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Aug 2003</div> Version 1.7</h3> |
| <ul> |
| <li>Fixed various Ant task bugs. |
| <li>Fixed ClassCastException due to explicitly used abstract classes with |
| implicitly used interfaces targeted at JRE1.2 (the default in JDK1.4). |
| <li>Fixed <code>-defaultpackage</code> bug for protected classes and class |
| members. |
| <li>Fixed ReTrace bug when retracing without line number tables. |
| <li>Worked around zip package problems with duplicate out entries and rogue |
| manifest files. |
| <li>Added work-around for handling malformed legacy interface class files. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>May 2003</div> Version 1.6</h3> |
| <ul> |
| <li>Added support for Ant. |
| <li>Added support for the J2ME Wireless Toolkit. |
| <li>Added support for reading and writing directory hierarchies. |
| <li>Added option for specifying resource jars and directories. |
| <li>Added support for wildcards in class member specifications. |
| <li>Improved handling of the <code>-defaultpackage</code> option. |
| <li>Improved stack trace parsing in ReTrace tool. |
| <li>Fixed processing of libraries containing public as well as non-public |
| extensions of non-public classes. |
| <li>Fixed examples for processing libraries, midlets, and serializable code. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Jan 2003</div> Version 1.5</h3> |
| <ul> |
| <li>Fixed processing of retrofitted library interfaces. |
| <li>Fixed processing of <code>.class</code> constructs in internal classes |
| targeted at JRE1.2 (the default in JDK1.4). |
| <li>Fixed <code>-dump</code> option when <code>-outjar</code> option is not |
| present. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Nov 2002</div> Version 1.4</h3> |
| <ul> |
| <li>Now copying resource files over from the input jars to the output jar. |
| <li>Added option to obfuscate using lower-case class names only. |
| <li>Added better option for obfuscating native methods. |
| <li>Added option not to ignore non-public library classes. |
| <li>Added automatic <code>.class</code> detection for classes compiled with |
| Jikes. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Sep 2002</div> Version 1.3</h3> |
| <ul> |
| <li>Added support for wildcards in class names. |
| <li>Added tool to de-obfuscate stack traces. |
| <li>Added options to print processing information to files. |
| <li>Added option to rename source file attributes. |
| <li>Fixed processing of implicitly used interfaces targeted at JRE1.2 (the |
| default in JDK1.4) |
| <li>Fixed processing of configurations with negated access modifiers. |
| <li>Fixed duplicate class entry bug. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Aug 2002</div> Version 1.2</h3> |
| <ul> |
| <li>Improved speed. |
| <li>Fixed processing of classes targeted at JRE1.2 (the default in JDK1.4) |
| with references to their own subclasses. |
| <li>Fixed processing of static initializers in J2ME MIDP applications. |
| <li>Fixed processing of retrofitted interfaces (again). |
| <li>Added more flexible handling of white space in configuration. |
| <li>Updated documentation. |
| </ul> |
| |
| <h3><div>Jul 2002</div> Version 1.1</h3> |
| <ul> |
| <li>Added automatic detection of <code>Class.forName("MyClass")</code>, |
| <code>MyClass.class</code>, and |
| <code>(MyClass)Class.forName(variable).newInstance()</code> constructs. |
| This greatly simplifies configuration. |
| <li>Added options to keep class names and class member names without affecting |
| any shrinking. They are mostly useful for native methods and serializable |
| classes. |
| <li>Fixed processing of retrofitted interfaces. |
| <li>Added handling of missing/invalid manifest file in input jar. |
| <li>Updated documentation and examples. |
| </ul> |
| |
| <h3><div>Jun 2002</div> Version 1.0</h3> |
| <ul> |
| <li>First public release, based on class parsing code from Mark Welsh's |
| <b>RetroGuard</b>. |
| </ul> |
| |
| <hr> |
| <address> |
| Copyright © 2002-2009 |
| <a href="http://www.graphics.cornell.edu/~eric/">Eric Lafortune</a>. |
| </address> |
| |
| </body> |
| </html> |