ProGuard Changelog

What's new in ProGuard 5.2

Jan 29, 2015
  • Added encoding of optimized line numbers in ProGuard.
  • Added decoding of optimized stack frames in ReTrace.
  • 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.

New in ProGuard 5.2 Beta (Jan 19, 2015)

  • Added encoding of optimized line numbers in ProGuard.
  • Added decoding of optimized stack frames in ReTrace.
  • 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.

New in ProGuard 5.1 (Oct 28, 2014)

  • Changes:
  • 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.

New in ProGuard 5.0 (Aug 20, 2014)

  • Added support for Java 8.
  • Added -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 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.
  • Updated documentation and examples.

New in ProGuard 4.11 (Dec 27, 2013)

  • 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.

New in ProGuard 4.10 (Aug 1, 2013)

  • 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.

New in ProGuard 4.9 (Aug 1, 2013)

  • 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.

New in ProGuard 4.8 (Aug 1, 2013)

  • 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.

New in ProGuard 4.7 (Aug 1, 2013)

  • 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.

New in ProGuard 4.6 (Aug 1, 2013)

  • 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 options.
  • Improved printing of notes about unkept classes.
  • Improved checking whether output is up to date.
  • Updated documentation and examples.

New in ProGuard 4.5.1 (Jul 9, 2010)

  • Added option -keepparameternames.
  • -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.

New in ProGuard 4.5 (Jun 7, 2010)

  • Added option -keepparameternames.
  • -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.

New in ProGuard 4.4 (Jul 22, 2009)

  • Added new peephole optimizations.
  • Added option -optimizations for fine-grained
  • configuration of optimizations.
  • Added option -adaptclassstrings for adapting
  • string constants that correspond to obfuscated
  • classes.
  • Added option -keeppackagenames for keeping
  • specified package names from being obfuscated.
  • Added option -keepdirectories for keeping
  • specified directory entries in output jars.
  • Extended options -dontnote and -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.
  • 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 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.

New in ProGuard 4.4 Beta 2 (Apr 22, 2009)

  • Added new peephole optimizations.
  • Added option -optimizations for fine-grained configuration of optimizations.
  • Added option -adaptclassstrings for adapting string constants that correspond to obfuscated classes.
  • Added option -keeppackagenames for keeping specified package names from being obfuscated.
  • Added option -keepdirectories for keeping specified directory entries in output jars.
  • Extended options -dontnote and -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.
  • Avoiding bug in IBM's JVM for JSE, in optimization step.
  • Avoiding ArrayIndexOutOfBoundsException in optimization step.
  • Fixed preverification of invocations of super constructors with arguments containing ternary operators.
  • 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.