Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures


Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips


Submit News
Search the site here...

ProGuard › Click to download › Updated Info

Main Page | Details | Download Now | History | Statistics | Promote | Tell a Friend

Category Obfuscation - Code Protection
Submitted by
Author's Name Eric P.F. Lafortune
Author's Email
Homepage proguard.sourceforge.net/
Version 4.0
Thu Jun 22, 2006 10:35 pm


ProGuard is a free Java class file shrinker, optimizer, and obfuscator. It can detect and remove unused classes, fields, methods, and attributes. It can then optimize bytecode and remove unused instructions. Finally, it can rename the remaining classes, fields, and methods using short meaningless names. The resulting jars are smaller and harder to reverse-engineer.

More compact jar files also means smaller storage requirements, faster transfer of applications across networks, faster loading, and smaller memory footprints.

ProGuard's main advantage compared to other Java obfuscators is probably its compact template-based configuration. A few intuitive command line options or a simple configuration file are usually sufficient. For instance, the following configuration option preserves all applets in a jar:

    -keep public class * extends java.applet.Applet
The user manual explains all available options and shows more examples of this powerful configuration style.

ProGuard is fast. It only takes seconds to process programs and libraries of several megabytes. The results section presents actual figures for a number of applications.

ProGuard is a command-line tool with an optional graphical user interface. It also comes with plugins for Ant and for the J2ME Wireless Toolkit.

Version 3.0 introduced bytecode optimization, reading and writing of nested jars, and a brand new Ant task. Please report any problems, so they can be fixed soon.


  • Made -keep options more orthogonal and flexible, with option modifiers allowshrinking, allowoptimization, and allowobfuscation.
  • Added support for configuration by means of annotations.
  • Now respecting naming rule for nested class names (EnclosingClass$InnerClass), if InnerClasses attributes or EnclosingMethod attributes are being kept.
  • Now also obfuscating package names, with new options -flattenpackagehierarchy and -repackageclasses.
  • Improved making classes and class members public or protected.
  • Comparing modification times of input and output to avoid unnecessary processing, with new option -forceprocessing.
  • Now printing notes on suspiciously unkept classes in parameters of specified methods.
  • Printing notes for class names that don't seem to be fully qualified.
  • Rewritten class file I/O code.
  • Added support for uppercase filename extensions.
  • Now supporting Java 6 class files.
  • TODO: Finish up intra-procedural optimizations.
  • TODO: Finish up Java 6 preverifier, with new option -dontpreverify.
  • TODO: Update documentation and examples.
Rating Not Rated
Votes 0

Popularity 5/5: Very Popular
Downloads 53
Page Views 2742

Download Now!

Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy