**ProGuard** is distributed under the terms of the GNU General Public License.
Please consult the [license page](license.md) for more details.

ProGuard is written in Java, so it requires a Java Runtime Environment
(JRE 1.7 or higher).

You can download ProGuard in various forms:

- [Pre-built artifacts](https://bintray.com/guardsquare/proguard) at JCenter
- [Pre-built artifacts](https://search.maven.org/search?q=g:net.sf.proguard) at Maven Central
- [Traditional pre-built archives](https://sourceforge.net/projects/proguard/files/) at SourceForge
- A [Mercurial repository of the source code](https://sourceforge.net/p/proguard/code/) at SourceForge
- A [Git repository of the source code](https://github.com/Guardsquare/proguard) at Github
- The [complete ProGuard manual](https://www.guardsquare.com/proguard) at Guardsquare

You can find major releases, minor releases with important bug fixes, and
beta releases with the latest new features and any less urgent bug fixes.

If you're still working with an older version of ProGuard, check out the
summary of changes below, to see if you're missing something essential.
Unless noted otherwise, ProGuard remains compatible across versions, so
don't be afraid to update.

## Version 6.2 <div>October 2019</div>

|        |          |          |
|--------|----------|----------|----------------------------------
| 6.2.2  |          | GRADLE   | Fixed missing runtime dependencies.
| 6.2.1  | PGD-12   | GRADLE   | Fixed build of Gradle plugin.
| 6.2.1  | DGD-827  | CORE     | Fixed retracing of obfuscated class / method names in some cases.
| 6.2.1  | PGD-15   | CORE     | Fixed potential `ClassFormatError` due to corrupt LineNumberTables when processing class files generated by groovy 2.5.5+.
| 6.2.1  | DGD-1503 | CORE     | Added default filter to prevent processing of versioned class files.
| 6.2.1  | DGD-1364 | DOCS     | Documented the mapping file format.
| 6.2.1  | DGD-950  | CORE     | Fixed potential `EmptyStackException` when generating mapping files with inlined methods in rare cases.
| 6.2.1  | PGD-10   | CORE     | Fixed potential `VerifyError` when optimizing classes with class version `11+` due to nest based access.
| 6.2.1  | PGD-11   | CORE     | Fixed gradle example for processing libraries.
| 6.2.1  | PGD-8    | CORE     | Fixed potential `IllegalArgumentException` with message `Value "x" is not a reference value` when optimizing code with conditional casts.
| 6.2.1  | DGD-1424 | CORE     | Fixed incomplete fix in case of inlining method with type annotations.
| 6.2.0  | DGD-1359 | CORE     | Fixed removal of non-static write-only fields (optimization `field/removal/writeonly`).
| 6.2.0  | DGD-1424 | CORE     | Fixed potential build error when inlining methods into code attributes with type annotations.
| 6.2.0  | PGD-764  | GUI      | Fixed text fields for obfuscation dictionaries.
| 6.2.0  | PGD-751  | GUI      | Fixed boilerplate settings and foldable panels.
| 6.2.0  | DGD-1418 | CORE     | Fixed class member access checking for backporting of closures.
| 6.2.0  | DGD-1359 | CORE     | Fixed removal of write-only fields.
| 6.2.0  | PGD-756  | CORE     | Fixed detection of functional interfaces.
| 6.2.0  | DGD-1317 | CORE     | Fixed potential build errors when optimizing methods with many parameters.
| 6.2.0  | PGD-753  | CORE     | Fixed processing of signature attributes in constructors of inner classes and enum types.
| 6.2.0  | PGD-759  | CORE     | Fixed backporting of Java 8 API types when used as parameters in private methods.
| 6.2.0  | PGD-1    | CORE     | Fixed optimization of exception handling in Kotlin runtime.

## Version 6.1 <div>May 2019</div>

- \[PGD-750\] Fixed UnsupportedOperationException when optimizing enum types
  in closure arguments.
- \[DGD-1276\] Fixed optimization of Groovy code constructs causing Dalvik
  conversion errors.
- \[DGD-1258\] Fixed potential VerifyError in JVM caused by inlining methods
  from super class.
- \[PGD-752\] Fixed preverification of initializers with inlined exception
  throwing code.
- \[PGD-755\] Fixed compatibility with older versions of ProGuard
  when used in combination with the Android gradle plugin.
- Fixed potential NullPointerException when using keep rules with
  includecode modifier.
- \[PGD-749\] Fixed merging of classes containing type annotations with empty
  targets.
- \[PGD-748\] Fixed optimization of exceptions as unused parameters.
- \[PGD-747\] Removed unwanted logging injection for native library loading.
- \[PGD-745\] Fixed IllegalArgumentException for comparison of constant arrays
  with NaN float/double values.
- \[PGD-744\] Fixed potential ClassCastException when optimizing method handles
  of simple enum types.
- \[DGD-504\] Fixed potential build errors when optimizing Kotlin
  code that combines `let` and the Elvis operator `?:`.
- \[PGD-741\] Improved incremental obfuscation.
- \[DGD-1050\] Fixed obfuscation of enums in annotations, for
  conversion by dx or D8.
- \[PGD-739\] Fixed the counter for the number of inlined
  constant parameters.
- \[PGD-188\] Added support for Java 10, 11, and 12.
- \[PGD-740\] Fixed shrinking of nest member attributes.
- \[PGD-735\] Fixed processing of parameter annotations in
  constructors of inner classes and enum types.
- \[PGD-734\] Fixed processing of lambda expressions for non-obvious
  functional interfaces.
- Added optimization of code that uses the GSON library, removing
  reflection to improve size and performance of the processed code.
- Added automatic backporting of code using the Java 8 stream API,
  enabled by adding net.sourceforge.streamsupport as a library.
- Added automatic backporting of Java 8 time API, enabled by adding
  org.threeten as a library.
- Added option `-assumevalues`, with corresponding optimizations on
  integer intervals.
- \[PGD-731\] Fixed incorrect error message about generics in
  wildcard expressions.
- \[PGD-730\] Fixed infinite loop in optimization.
- \[PGD-720\] Fixed unboxed enum types being compared to null.
- Fixed writing out mapping files with duplicate lines.
- Fixed potentially inconsistent local variable type table.
- Fixed backporting of default interface methods if an interface
  extends another one.
- Now uniformly reading and writing text files with UTF-8 encoding.
- \[PGD-708\] Fixed possible verification error due to exception
  handlers in Kotlin initializers.
- \[PGD-712\] Fixed NullPointerException triggered by `module-info`
  classes with `requires` without version.
- \[PGD-709\] Improved error messages for problems parsing wildcards.

## Version 6.0 <div>Feb 2018</div>

- \[PGD-701\] Fixed potential VerifyError in the presence of branches
  to instruction offset 0.
- Fixed backporting of lambda functions using the alternative
  factory method.
- \[PGD-699\] Fixed obfuscation of closures that implement
  multiple interfaces.
- \[PGD-694\] Fixed classes prefix when writing output to directories.
- \[PGD-186\] Added support for Java 10.
- \[PGD-698\] Fixed possible NullPointerException when
  parsing configuration.
- \[PGD-655\] Fixed access from static methods to protected methods
  in superclasses.
- \[PGD-693\] Fixed obfuscation of closures for functional interfaces
  with default methods.
- Added new option `-if`, to specify conditions for [`-keep`](manual/usage.md#keep) options.
- Added new option `-addconfigurationdebugging`, to instrument the
  code to get feedback about missing configuration at runtime.
- Added new option [`-android`](manual/usage.md#android) to tune processing for Android.
- Added support for references to matched wildcards in regular
  expressions in `-keep` options.
- Added new options `-assumenoexternalsideeffects`,
  `-assumenoescapingparameters`, and `-assumenoexternalreturnvalues`,
  to express fine-grained assumptions for better code optimization.
- Added backporting of Java 8 code.
- Added backporting and support for Java 9 code.
- Improved vertical class merging.
- \[PGD-689\] Fixed optimization potentially causing unexpected error
  while processing Kotlin bytecode.
- \[PGD-690\] Fixed NullPointerException when editing keep
  specifications in GUI.
- \[PGD-688\] Fixed UnsupportedOperationException while optimizing
  type annotations.
- \[PGD-654\] Fixed processing of MethodParameters attributes with
  nameless parameters.
- \[PGD-662\] Fixed obfuscation causing clashing private and default
  method names.
- \[PGD-684\] Fixed obfuscation of extensions of functional interfaces
  that are implemented with closures.
- \[PGD-681\] Fixed potential IllegalArgumentException in
  simplification of tail recursion.
- \[PGD-672\] Fixed memory leak writing compressed zip entries.
- \[PGD-652\] Fixed possible NullPointerException due to missing
  variable initialization.
- \[PGD-641\] Fixed possible NullPointerException due to optimized
  enum types.
- \[PGD-630\] Fixed possible NullPointerException in
  optimization step.
- \[PGD-637\] Fixed simplification of enum types in
  invokedynamic calls.
- Fixed merging of classes sometimes resulting in final methods
  being overridden.
- Fixed simplification of enum types that are stored in arrays.
- Fixed VerifyError triggered by merging classes with
  shrinking disabled.

## Version 5.3 <div>Sep 2016</div>

- Avoiding obfuscated name clashes with library classes.
- Fixed processing of generic signatures with inner classes.
- Fixed processing of generic signatures with array types as bounds.
- Fixed processing of wide branch instructions.
- Fixed shrinking of nameless parameters attribute.
- Fixed optimization of code with unreachable exception handlers.
- Fixed optimization of enum types with custom fields.
- Fixed optimization of enum types with custom static methods.
- Fixed optimization of lambda method types.
- Fixed optimization of parameter annotations.
- Fixed optimization of swap/pop constructs.
- Fixed adapting class access for referenced class members.
- Fixed adapting invocations for referenced class members.
- Preserving class member signature classes if
  `includedescriptorclasses` is specified.
- Allowing empty output jars if [`-ignorewarnings`](manual/usage.md#ignorewarnings) is specified.
- Avoiding exceptions when inlining invalid line number
  instruction offsets.
- Fixed preverification of wildcard exceptions.
- Fixed ReTrace for field names.
- Fixed ReTrace for negative line numbers.
- Improved ReTrace regular expression for Logback and Log4j.
- Added Gradle build file.
- Updated documentation and examples.

## Version 5.2 <div>Jan 2015</div>

- Added encoding of optimized line numbers in ProGuard.
- Added decoding of optimized stack frames in ReTrace.
- Added overflow checks when writing out class files.
- Fixed shrinking of default methods in subinterfaces.
- Fixed optimization of closures with signatures containing
  merged classes.
- Fixed conservative optimization of instructions that may
  throw exceptions.
- Fixed internal processing of primitive array types.
- Updated documentation and examples.

## Version 5.1 <div>Oct 2014</div>

- Fixed processing of various kinds of closures in Java 8.
- Fixed shrinking of generic signatures in classes and methods.
- Fixed shrinking of debug information about generic local
  variable types.
- Fixed optimization of default implementations in interfaces.
- Fixed optimization of variable initializations.
- Fixed obfuscation of internal class names in strings.
- Updated documentation and examples.

## Version 5.0 <div>Aug 2014</div>

- Added support for Java 8.
- Added [`-keep`](manual/usage.md#keep) modifier `includedescriptorclasses`.
- Added automatic suggestions for keeping attributes.
- Clearing preverification information when `-dontpreverify`
  is specified.
- Extended optimization support for conservative optimization with
  java system property `optimize.conservatively`.
- Fixed occasional preverification problem.
- Fixed shrinking of generic class signatures.
- Fixed shrinking of generic variable signatures.
- Fixed analysis of unused parameters for bootstrap methods in
  library classes.
- Fixed inlining problem of non-returning subroutines.
- Fixed possible IllegalArgumentException and
  ArrayIndexOutOfBoundsException in enum simplification.
- Fixed unnecessary notes about dynamic class instantiations with
  constant class names.
- Fixed preverification of unnecessary casts of null values.
- Fixed lazy resolution of output jars in Gradle task.
- Fixed processing of synthetic code with alternative
  initializer invocations.
- Improved handling of symbolic links in shell scripts.
- Improved default path in Windows bat files.
- Updated documentation and examples.

## Version 4.11 <div>Dec 2013</div>

- Added simplification of basic enum types.
- Added reading and writing of apk and aar archives.
- Fixed criteria for class merging.
- Fixed simplification of variable initializations.
- Fixed simplification of redundant boolean variables.
- Fixed optimization of unused stack entries in exception handlers.
- Fixed correction of access flags after class merging, method
  inlining, and class repackaging.
- Refined criterion for method inlining.
- Updated documentation and examples.

## Version 4.10 <div>Jul 2013</div>

- Made Gradle task resolve files lazily.
- Enabled as-needed execution in Gradle task.
- Using standard string interpolation for Gradle configuration.
- Reduced log levels for console output in Gradle task.
- Updated documentation and examples.

## Version 4.9 <div>Mar 2013</div>

- Added Gradle task.
- Added more peephole optimizations for strings.
- Improved optimization of classes with static initializers.
- Improved processing of finally blocks compiled with JDK 1.4
  or older.
- Fixed shrinking of access widening abstract methods, for the
  Dalvik VM.
- Fixed overly aggressive shrinking of class annotations.
- Fixed processing of unused classes in generic signatures.
- Fixed merging of classes with similar class members.
- Added java system property `optimize.conservatively` to allow for
  instructions intentionally throwing `NullPointerException`,
  `ArrayIndexOutOfBoundsException`, or `ClassCastException` without
  other useful effects.
- Fixed optimization of unnecessary variable initializations.
- Fixed optimization of code involving NaN.
- Fixed inlining of methods that are supposed to be kept.
- Fixed preverification of artificially convoluted dup constructs.
- Fixed quotes for java commands in .bat scripts.
- Improved handling of non-sequential line number information.
- Now requiring Java 5 or higher for running ProGuard.
- Updated build files.
- Updated documentation and examples.

## Version 4.8 <div>May 2012</div>

- Added more peephole optimizations for strings.
- Added support for multiple external configuration files in
  Ant configurations.
- Added support for Ant properties in external configuration files.
- Fixed parsing of empty file filters on input and output.
- Fixed parsing of '\*' wildcard for file filters and name filters.
- Fixed obfuscation of private methods that are overridden in concrete
  classes with intermediary abstract classes and interfaces
  (workaround for Oracle bugs \#6691741 and \#6684387).
- Fixed optimization of complex finally blocks, compiled with JDK 1.4
  or earlier.
- Fixed optimizing signatures of methods that are marked as not having
  side effects.
- Fixed optimization of long local variables possibly causing
  verification error for register pairs.
- Fixed merging of classes defined inside methods.
- Fixed stack consistency in optimization step.
- No longer removing debug information about unused parameters, for
  `-keepparameternames` or `-keepattributes`.
- Fixed updating manifest files with carriage return characters.
- Now removing unreachable code in preverification step.
- Improved default regular expression for stack traces in ReTrace.
- Updated documentation and examples.

## Version 4.7 <div>Dec 2011</div>

- Added support for Java 7.
- Parsing unquoted file names with special characters more leniently.
- Added support for instance methods overriding class methods.
- Added removal of unused parameterless constructors.
- Added removal of empty class initializers.
- Added peephole optimizations for constant strings.
- Avoiding idle optimization passes.
- Improved removal of unused constants after obfuscation.
- Fixed removal of unused classes referenced by annotations.
- Fixed simplifying parameters of constructors that should actually
  be preserved.
- Fixed simplifying parameters of large numbers of
  similar constructors.
- Fixed exceptions in optimization of unusual obfuscated code.
- Fixed NullPointerException when specifying `-keepclassmembers`
  without specific class or class members.
- Fixed potential problems with mixed-case class name dictionaries
  when not allowing mixed-case class names.
- Fixed obfuscation of classes with EnclosingMethod attributes that
  don't specify methods.
- Fixed preverification of returning try blocks with finally blocks,
  inside try blocks, when compiled with JDK 1.4.
- Fixed sorting of interfaces containing generics.
- Fixed paths in shell scripts.
- Fixed filling in of text fields showing class obfuscation dictionary
  and package obfuscation dictionary from configuration in GUI.
- Worked around Oracle Java 6/7 bug \#7027598 that locked the GUI
  on Linux.
- Updated documentation and examples.

## Version 4.6 <div>Feb 2011</div>

- Added support for synthetic, bridge, and varargs modifiers
  in configuration.
- Added detection of atomic updater construction with
  constant arguments.
- Fixed merging of package visible classes.
- Fixed optimization of fields that are only accessed by reflection.
- Fixed optimization of read-only or write-only fields that
  are volatile.
- Fixed handling of side-effects due to static initializers.
- Fixed handling of bridge flags in obfuscation step.
- Fixed handling of super flag when merging classes.
- Fixed updating of variable tables when optimizing variables.
- Fixed removal of unused parameters with 32 or more parameters.
- Fixed incorrect removal of exception handler for
  instanceof instruction.
- Fixed inlining of methods with unusual exception handlers.
- Fixed optimization of unusual code causing stack underflow.
- Fixed keeping of constructor parameter names.
- Fixed unwanted wrapping of non-standard META-INF files.
- Fixed filtering of warnings about references to array types.
- Fixed overriding of warning option and note option in Ant task.
- Improved detection of file name extensions for canonical paths.
- Improved printing of seeds specified by [`-keep`](manual/usage.md#keep) options.
- Improved printing of notes about unkept classes.
- Improved checking whether output is up to date.
- Updated documentation and examples.

## Version 4.5 <div>Jun 2010</div>

- Added option `-keepparameternames`.
- [`-dontskipnonpubliclibraryclasses`](manual/usage.md#dontskipnonpubliclibraryclasses) is now set by default. Added
  `-skipnonpubliclibraryclasses` as an option.
- Made processing independent of order of input classes to get even
  more deterministic output.
- Improved constant field propagation.
- Improved renaming of resource files in subdirectories of packages.
- Avoiding making fields in interfaces private.
- Optimizing exception handlers for monitorexit instruction.
- Reduced maximum allowed code length after inlining from 8000 bytes
  to 7000 bytes.
- Fixed missing warnings about missing library classes.
- Fixed shrinking of annotations with arrays of length 0.
- Fixed handling of -0.0 and NaN values when simplifying expressions.
- Fixed copying of exception handlers when simplifying tail
  recursion calls.
- Fixed optimization of introspected fields.
- Fixed simplification of unnecessary variable initializations.
- Fixed evaluation of subroutines in pre-JDK 1.5 code.
- Fixed updating of access flags in inner classes information.
- Fixed disabling of field privatization.
- Fixed invocations of privatized methods.
- Fixed updating of local variable debug information in
  optimization step.
- Fixed print settings without file name in GUI.
- Fixed field privatization setting in GUI.
- Fixed saving incorrectly quoted arguments in GUI.
- Fixed handling of regular expressions with only negators.
- Fixed unwanted wrapping of non-standard META-INF files.
- Fixed regular expression pattern for constructors in ReTrace.
- Updated documentation and examples.

## Version 4.4 <div>Jul 2009</div>

- Added new peephole optimizations.
- Added option [`-optimizations`](manual/usage.md#optimizations) for fine-grained configuration
  of optimizations.
- Added option [`-adaptclassstrings`](manual/usage.md#adaptclassstrings) for adapting string constants that
  correspond to obfuscated classes.
- Added option [`-keeppackagenames`](manual/usage.md#keeppackagenames) for keeping specified package names
  from being obfuscated.
- Added option [`-keepdirectories`](manual/usage.md#keepdirectories) for keeping specified directory
  entries in output jars.
- Extended options [`-dontnote`](manual/usage.md#dontnote) and [`-dontwarn`](manual/usage.md#dontwarn) for fine-grained
  configuration of notes and warnings.
- Added option `-regex` in ReTrace, for specifying alternative regular
  expressions to parse stack traces.
- Extended renaming of resource files based on obfuscation.
- Improved inlining of constant parameters and removal of
  unused parameters.
- Avoiding bug in IBM's JVM for JSE, in optimization step.
- Avoiding ArrayIndexOutOfBoundsException in optimization step.
- Fixed configuration with annotations that are not
  preserved themselves.
- Fixed preverification of invocations of super constructors with
  arguments containing ternary operators.
- Fixed processing of unreachable exception handlers.
- Fixed merging of exception classes.
- Fixed repeated method inlining.
- Fixed inlining of finally blocks surrounded by large try blocks,
  compiled with JDK 1.4 or earlier.
- Fixed optimization of complex finally blocks, compiled with JDK 1.4
  or earlier.
- Fixed obfuscation of anonymous class names, if `EnclosingMethod`
  attributes are being kept.
- Fixed obfuscation of inner class names in generic types.
- Fixed decoding of UTF-8 strings containing special characters.
- Fixed copying of debug information and annotations when
  merging classes.
- Fixed writing out of unknown attributes.
- Fixed updating manifest files with split lines.
- Updated documentation and examples.

## Version 4.3 <div>Dec 2008</div>

- Added class merging.
- Added static single assignment analysis.
- Added support for annotation and enumeration class types
  in configuration.
- Refined shrinking of fields in case of unusual
  `-keepclassmembers` options.
- Added simplification of tail recursion calls.
- Added new peephole optimizations.
- Fixed optimization of unused variable initializations causing
  negative stack sizes.
- Fixed optimization of unusual initialization code
  causing NullPointerExceptions.
- Fixed optimization of half-used long and double parameters.
- Fixed processing of complex generics signatures.
- Working around suspected java compiler bug with parameter
  annotations on constructors of non-static inner classes.
- Fixed obfuscation of classes with inner classes whose names
  are preserved.
- Fixed access of protected methods in repackaged classes.
- Added options [`-classobfuscationdictionary`](manual/usage.md#classobfuscationdictionary) and
  `-packageobfuscationdictionary`.
- Adapting more types of resource file names based on obfuscation.
- Extended warnings about incorrect dependencies.
- Added start-up scripts and build scripts.
- Updated documentation and examples.

## Version 4.2 <div>Mar 2008</div>

- Refined data flow analysis in optimization step.
- Fixed handling of exceptions when inlining subroutines.
- Fixed inlining of incompatible code constructs between different
  java versions.
- Fixed computation of local variable frame size.
- Fixed optimization of infinite loops.
- Fixed optimization of subroutine invocations.
- Fixed optimization of floating point remainder computations.
- Fixed removal of unused parameters in method descriptors containing
  arrays of longs or doubles.
- Added undocumented java system properties
  `maximum.inlined.code.length` (default is 8) and
  `maximum.resulting.code.length` (defaults are 8000 for JSE and 2000
  for JME), for expert users who read release notes.
- Fixed processing of generic types in Signature attributes in
  shrinking and optimization steps.
- Fixed processing of inner class names in Signature attributes in
  obfuscation step.
- Improved adapting resource file names following obfuscated
  class names.
- Fixed interpretation of package names in GUI.
- Fixed default settings for Xlets in GUI.
- Updated documentation and examples.

## Version 4.1 <div>Dec 2007</div>

- Fixed shrinking of default annotation element values.
- Fixed optimization of invocations of methods in same class that are
  accessed through extensions.
- Fixed optimization of invocations of synchronized methods without
  other side-effects.
- Fixed optimization of some non-returning subroutines.
- Fixed handling of local variable debug information when
  inlining methods.
- Avoiding StackOverflowErrors during optimization of complex methods.
- Fixed obfuscation of potentially ambiguous non-primitive constants
  in interfaces.
- Fixed preverification of some code constructs involving String,
  Class, and exception types.
- The Ant task now allows empty `<injars>` and
  `<libraryjars>` elements.
- Updated documentation and examples.

## Version 4.0 <div>Sep 2007</div>

- Added preverifier for Java 6 and Java Micro Edition, with new
  options `-microedition` and `-dontpreverify`.
- Added new option [`-target`](manual/usage.md#target) to modify java version of processed
  class files.
- Made [`-keep`](manual/usage.md#keep) options more orthogonal and flexible, with option
  modifiers `allowshrinking`, `allowoptimization`, and
  `allowobfuscation`.
- Added new wildcards for class member descriptors: "`***`", matching
  any type, and "`...`", matching any number of arguments.
- Added support for configuration by means of annotations.
- Improved shrinking of unused annotations.
- Added check on modification times of input and output, to avoid
  unnecessary processing, with new option `-forceprocessing`.
- Added new options [`-flattenpackagehierarchy`](manual/usage.md#flattenpackagehierarchy) and `-repackageclasses`
  (replacing `-defaultpackage`) to control obfuscation of
  package names.
- Added new options [`-adaptresourcefilenames`](manual/usage.md#adaptresourcefilenames) and
  `-adaptresourcefilecontents`, with file filters, to update resource
  files corresponding to obfuscated class names.
- Added detection of dynamically accessed fields and methods.
- Now treating `Exceptions` attributes as optional.
- Now respecting naming rule for nested class names
  (`EnclosingClass$InnerClass`) in obfuscation step, if `InnerClasses`
  attributes or `EnclosingMethod` attributes are being kept.
- Added new inter-procedural optimizations: method inlining and
  propagation of constant fields, constant arguments, and constant
  return values.
- Added optimized local variable allocation.
- Added more than 250 new peephole optimizations.
- Improved making classes and class members public or protected.
- Now printing notes on suspiciously unkept classes in parameters of
  specified methods.
- Now printing notes for class names that don't seem to be
  fully qualified.
- Added support for uppercase filename extensions.
- Added tool tips to the GUI.
- Rewritten class file I/O code.
- Updated documentation and examples.

Upgrade considerations:

- Since ProGuard now treats the `Exceptions` attribute as optional,
  you may have to specify `-keepattributes Exceptions`, notably when
  processing code that is to be used as a library.
- ProGuard now preverifies code for Java Micro Edition, if you specify
  the option `-microedition`. You then no longer need to process the
  code with an external preverifier.
- You should preferably specify [`-repackageclasses`](manual/usage.md#repackageclasses) instead of the old
  option name `-defaultpackage`.

## Version 3.11 <div>Dec 2007</div>

- Fixed optimization of invocations of methods in same class that are
  accessed through extensions.
- Fixed optimization of invocations of synchronized methods without
  other side-effects.
- Updated documentation and examples.

## Version 3.10 <div>Aug 2007</div>

- Now handling mixed-case input class names when
  `-dontusemixedcaseclassnames` is specified.
- Fixed optimization of synchronization on classes, as compiled by
  Eclipse and Jikes.
- Fixed optimization of switch statements with unreachable cases.
- Avoiding merging subsequent identically named files.
- Updated documentation and examples.

## Version 3.9 <div>Jun 2007</div>

- Fixed processing of .class constructs in Java 6.
- Fixed repeated processing of .class constructs.
- Fixed possible division by 0 in optimization step.
- Fixed handling of variable instructions with variable indices larger
  than 255.
- Updated documentation and examples.

## Version 3.8 <div>Mar 2007</div>

- Fixed optimization of parameters used as local variables.
- Fixed obfuscation with conflicting class member names.
- Fixed incremental obfuscation with incomplete mapping file for
  library jars.
- Updated documentation and examples.

## Version 3.7 <div>Dec 2006</div>

- Now accepting Java 6 class files.
- Fixed shrinking of partially used annotations.
- Improved incremental obfuscation, with new option
  `-useuniqueclassmembernames`.
- Printing more information in case of conflicting configuration
  and input.
- Fixed optimization of repeated array length instruction.
- Fixed optimization of subsequent try/catch/finally blocks with
  return statements.
- Fixed optimization of complex stack operations.
- Fixed optimization of simple infinite loops.
- Fixed optimization of expressions with constant doubles.
- Tuned optimization to improve size reduction after preverification.
- Fixed overflows of offsets in long code blocks.
- Now allowing class names containing dashes.
- Updated documentation and examples.

## Version 3.6 <div>May 2006</div>

- No longer automatically keeping classes in parameters of specified
  methods from obfuscation and optimization (introduced in
  version 3.4).
- Fixed inlining of interfaces that are used in .class constructs.
- Fixed removal of busy-waiting loops reading volatile fields.
- Fixed optimization of comparisons of known integers.
- Fixed optimization of known branches.
- Fixed optimization of method calls on arrays of interfaces.
- Fixed optimization of method calls without side-effects.
- Fixed optimization of nested try/catch/finally blocks with
  return statements.
- Fixed initialization of library classes that only appear
  in descriptors.
- Fixed matching of primitive type wildcards in configuration.
- Fixed the boilerplate specification for enumerations in the GUI.
- Updated documentation and examples.

## Version 3.5 <div>Jan 2006</div>

- Fixed obfuscation of class members with complex visibility.
- Fixed optimization bugs causing stack verification errors.
- Fixed optimization bug causing overridden methods to be finalized.
- Fixed optimization bug causing abstract method errors for
  retro-fitted library methods.
- Fixed optimization bug evaluating code with constant long values.
- Fixed bug in updating of optional local variable table attributes
  and local variable type table attributes after optimization.
- Fixed interpretation of comma-separated class names
  without wildcards.
- Updated documentation and examples.

## Version 3.4 <div>Oct 2005</div>

- Extended optimizations: removing duplicate code within methods.
- Extended regular expressions for class names to
  comma-separated lists.
- Now automatically keeping classes in descriptors of kept
  class members.
- Added verbose statistics for optimizations.
- Added boilerplate Number optimizations in GUI.
- Fixed `Class.forName` detection.
- Fixed incremental obfuscation bug.
- Fixed optimization bug causing stack verification errors.
- Fixed optimization bugs related to removal of unused parameters.
- Fixed exception when optimizing code with many local variables.
- Fixed exception when saving configuration with initializers in GUI.
- Updated documentation and examples.

## Version 3.3 <div>Jun 2005</div>

- Extended optimizations: making methods private and static when
  possible, making classes static when possible, removing
  unused parameters.
- Made file names relative to the configuration files in which they
  are specified. Added `-basedirectory` option.
- Added [`-whyareyoukeeping`](manual/usage.md#whyareyoukeeping) option to get details on why given classes
  and class members are being kept.
- Added warnings for misplaced class files.
- Improved printing of notes for `Class.forName` constructs.
- Implemented '`assumenosideeffects`' nested element in Ant task.
- Improved processing of annotations.
- Fixed reading and writing of parameter annotations.
- Fixed various optimization bugs.
- Fixed wildcards not matching '-' character.
- Fixed wildcard bug and checkbox bugs in GUI.
- Setting file chooser defaults in GUI.
- Leaving room for growBox in GUI on Mac OS X.
- Properly closing configuration files.
- Updated documentation and examples.

## Version 3.2 <div>Dec 2004</div>

- Fixed JDK5.0 processing bugs.
- Fixed optimization bugs.
- Fixed relative paths in Ant task.
- Improved speed of shrinking step.
- Updated documentation and examples.

## Version 3.1 <div>Nov 2004</div>

- Improved obfuscation and shrinking of private class members.
- Added inlining of interfaces with single implementations.
- Added option to specify obfuscation dictionary.
- Added option to read package visible library class members.
- Extended support for JDK5.0 attributes.
- Fixed various optimization bugs.
- Modified Ant task to accept paths instead of filesets.
- Fixed two Ant task bugs.
- Updated documentation and examples.

## Version 3.0 <div>Aug 2004</div>

- Added bytecode optimization step, between shrinking step and
  obfuscation step.
- Generalized filtered recursive reading and writing of jars, wars,
  ears, zips, and directories.
- Added support for grouping input and output jars, wars, ears, zips,
  and directories.
- Added support for applying mapping files to library classes.
- Removed `-resourcejars` option. Resources should now be read using
  regular `-injars` options, using filters if necessary.
- Rewrote Ant task. Input and output modification dates are not
  checked at the moment. Minor changes in XML schema:
  -   Filters now specified using attributes.
  -   '`outjars`' now nested element instead of attribute.
  -   '`type`' attribute of `<method>` element no longer defaults to
      '`void`'.
  -   `<` and `>` characters now have to be encoded in
      embedded configurations.
  -   `<proguardconfiguration>` task no longer accepts attributes.
- Updated J2ME WTK plugin, now customizable through
  configuration file.
- Updated GUI.
- Fixed various processing bugs.
- Fixed ReTrace parsing bugs.
- Improved jar compression.
- Updated documentation and examples.

## Version 2.1 <div>Mar 2004</div>

- Added support for JDK1.5 classes.
- Added additional wildcard for matching primitive types.
- Added possibility to switch off notes about duplicate
  class definitions.
- Fixed use of multiple filters on output jars.
- Fixed option to keep all attributes.
- Fixed various Ant task bugs.
- Updated documentation and examples.

## Version 2.0 <div>Dec 2003</div>

- Added a graphical user interface for ProGuard and ReTrace.
- Added [`-applymapping`](manual/usage.md#applymapping) option for incremental obfuscation.
- Added support for filtering input and output files.
- Added support for the J++ `SourceDir` attribute.
- Improved detection of `.class` constructs.
- Improved handling of misplaced manifest files.
- Improved implementation of ReTrace.
- Worked around String UTF-8 encoding bug affecting
  foreign characters.
- Fixed exception when ignoring warnings.
- Fixed various Ant task bugs.
- Updated documentation and examples.

## Version 1.7 <div>Aug 2003</div>

- Fixed various Ant task bugs.
- Fixed ClassCastException due to explicitly used abstract classes
  with implicitly used interfaces targeted at JRE1.2 (the default
  in JDK1.4).
- Fixed `-defaultpackage` bug for protected classes and class members.
- Fixed ReTrace bug when retracing without line number tables.
- Worked around zip package problems with duplicate out entries and
  rogue manifest files.
- Added work-around for handling malformed legacy interface
  class files.
- Updated documentation and examples.

## Version 1.6 <div>May 2003</div>

- Added support for Ant.
- Added support for the J2ME Wireless Toolkit.
- Added support for reading and writing directory hierarchies.
- Added option for specifying resource jars and directories.
- Added support for wildcards in class member specifications.
- Improved handling of the `-defaultpackage` option.
- Improved stack trace parsing in ReTrace tool.
- Fixed processing of libraries containing public as well as
  non-public extensions of non-public classes.
- Fixed examples for processing libraries, midlets, and
  serializable code.
- Updated documentation and examples.

## Version 1.5 <div>Jan 2003</div>

- Fixed processing of retrofitted library interfaces.
- Fixed processing of `.class` constructs in internal classes targeted
  at JRE1.2 (the default in JDK1.4).
- Fixed [`-dump`](manual/usage.md#dump) option when `-outjar` option is not present.
- Updated documentation and examples.

## Version 1.4 <div>Nov 2002</div>

- Now copying resource files over from the input jars to the
  output jar.
- Added option to obfuscate using lower-case class names only.
- Added better option for obfuscating native methods.
- Added option not to ignore non-public library classes.
- Added automatic `.class` detection for classes compiled with Jikes.
- Updated documentation and examples.

## Version 1.3 <div>Sep 2002</div>

- Added support for wildcards in class names.
- Added tool to de-obfuscate stack traces.
- Added options to print processing information to files.
- Added option to rename source file attributes.
- Fixed processing of implicitly used interfaces targeted at JRE1.2
  (the default in JDK1.4)
- Fixed processing of configurations with negated access modifiers.
- Fixed duplicate class entry bug.
- Updated documentation and examples.

## Version 1.2 <div>Aug 2002</div>

- Improved speed.
- Fixed processing of classes targeted at JRE1.2 (the default in
  JDK1.4) with references to their own subclasses.
- Fixed processing of static initializers in J2ME MIDP applications.
- Fixed processing of retrofitted interfaces (again).
- Added more flexible handling of white space in configuration.
- Updated documentation.

## Version 1.1 <div>Jul 2002</div>

- Added automatic detection of `Class.forName("MyClass")`,
  `MyClass.class`, and
  `(MyClass)Class.forName(variable).newInstance()` constructs. This
  greatly simplifies configuration.
- Added options to keep class names and class member names without
  affecting any shrinking. They are mostly useful for native methods
  and serializable classes.
- Fixed processing of retrofitted interfaces.
- Added handling of missing/invalid manifest file in input jar.
- Updated documentation and examples.

## Version 1.0 <div>Jun 2002</div>

- First public release, based on class parsing code from Mark Welsh's
  **RetroGuard**.
