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><injars></code> and 333 <code><libraryjars></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><method></code> element no 559 longer defaults to '<code>void</code>'. 560 <li><code><</code> and <code>></code> characters now have to be 561 encoded in embedded configurations. 562 <li><code><proguardconfiguration></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 © 2002-2013 697 <a target="other" href="http://www.lafortune.eu/">Eric Lafortune</a>. 698 </address> 699 700 </body> 701 </html> 702