Projects / ProGuard

ProGuard

ProGuard is a shrinker, optimizer, obfuscator, and preverifier for Java bytecode. It detects and removes unused classes, fields, methods, and attributes. It optimizes methods and removes dead code. It renames the remaining classes, fields, and methods using short, meaningless names. Finally, it preverifies the processed code for Java 6 or higher, or for Java Micro Edition. The resulting code is more compact, more efficient, and more difficult to reverse-engineer. Advantages of ProGuard compared to other Java shrinkers and obfuscators are compact template-based configuration, memory efficiency, and speed. It is mostly popular for embedded development and for commercial development, and is integrated in Oracle's Wireless Toolkit, in Intel's TXE SDK, and in Google's Android SDK.

Tags
Licenses
Operating Systems
Implementation

RSS Recent releases

  •  27 Dec 2013 23:39

    Release Notes: The optimization step can now simplify enum types, replacing the synthetic classes that the compiler generates by plain integer constants. This release also fixes a number of bugs, notably in class merging and method inlining.

    •  31 Jul 2013 17:56

      Release Notes: This release mainly updates the Gradle task, for easier integration in the Android SDK. ProGuard's notes and warnings now point to the relevant paragraphs on the Troubleshooting page in the documentation. The Troubleshooting page has additional specific information on Android issues.

      •  19 Mar 2013 15:09

        Release Notes: The most prominent new feature of this release is a custom ProGuard task for the Gradle build system. It provides clean integration, with full support for ProGuard's options in Gradle's configuration language. The optimization step contains internal improvements for optimizing static initializers and optimizing away unnecessary string operations. This release also contains various bugfixes collected since the previous release. The documentation and examples have been extended. This version is compatible with previous versions, so upgrading is as simple as switching to the new jars.

        •  29 May 2012 00:57

          Release Notes: This release mostly fixes a series of minor problems in configuration parsing, optimization, and obfuscation. It also adds a few string optimizations to the optimization step, and small enhancements for configuration with the Ant task. This version is entirely compatible with previous versions, so upgrading is simply a matter of switching to the new jars.

          •  21 Dec 2011 22:47

          Release Notes: This release adds support for processing Java 7 code. It shrinks class files slightly better. It fixes a number of issues in the optimization and obfuscation steps and in the GUI. For Android developers, it works around a problem with spaces in path names in the Android SDK.

          RSS Recent comments

          15 Oct 2007 01:03 Avatar syntevo Thumbs up

          All problems fixed with version 4.0.1

          > Unfortunately, we need to stick with

          > version 3.6 because every new version

          > we've tried caused our application to

          > behave incorrectly (e.g. menus did not

          > open) or to throw some exceptions at the

          > application start (although we don't use

          > reflection).

          With version 4.0.1 all these problems are fixed. Thanks, Eric, for the excellent work!

          31 Aug 2007 03:08 Avatar syntevo Thumbs up

          Good tool, but...
          We use ProGuard since a couple of years and are very happy with it. It provides good obfuscation for zero price.

          Unfortunately, we need to stick with version 3.6 because every new version we've tried caused our application to behave incorrectly (e.g. menus did not open) or to throw some exceptions at the application start (although we don't use reflection). The bad thing is, that finding such bugs is very hard without (major) knowledge of the byte-code internals. Sending unobfuscated application code over the internet is also not a good choice.

          06 Jul 2007 19:02 johngunther Thumbs up

          It works for me...thanks!
          This package shrunk my jar to 1/3 its size, eliminated unused methods and gave the rest names like a, b, c, etc. Just what I needed. Best of all, thanks to the wizardly GUI builder, I was able to do this in practically zero time.

          I like the way the GUI builder is a transparently clean front-end for the underlying ant script (which is quite readable), and how well the various defaults were chosen. There's great documentation, too.

          Even if you don't need an obfuscation tool, the code shrinkage and method elimination gives your Java applications many of the advantages associated with languages like C.

          Have only used it on a small application so far, but I very much liked what I saw...Thanks for creating what I expect will be an important addition to my Java toolkit going forward.

          Screenshot

          Project Spotlight

          Tardis

          A TimeMachine style backup system for Linux.

          Screenshot

          Project Spotlight

          Text2GUI

          A program that generates Java GUIs from natural language.