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