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.