| **ProGuard** is a free Java class file shrinker, optimizer, obfuscator, and | |
| preverifier. It detects and removes unused classes, fields, methods, and | |
| attributes. It optimizes bytecode and removes unused instructions. It renames | |
| the remaining classes, fields, and methods using short meaningless names. The | |
| resulting applications and libraries are smaller, faster, and a bit better | |
| hardened against reverse engineering. | |
| Typical applications: | |
| - Reducing the size of Android apps for faster downloads, shorter startup | |
| times, and smaller memory footprints. | |
| - Optimizing code for better performance on mobile devices. | |
| **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. The user manual | |
| explains all available options and shows 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, for Gradle, and for the JME Wireless | |
| Toolkit. It is already part of Google's Android SDK, where it can be enabled | |
| with a simple flag. | |
| **ProGuard** provides basic protection against reverse engineering and | |
| tampering, with basic name obfuscation. | |
| [**DexGuard**](http://www.guardsquare.com/dexguard), its specialized | |
| commercial extension for Android, focuses further on the protection of apps, | |
| additionally optimizing, obfuscating and encrypting strings, classes, | |
| resources, resource files, asset files, and native libraries. Professional | |
| developers should definitely consider it for security-sensitive apps. | |