ProGuard
guardsquare.com
What it is
ProGuard is a free, open-source command-line tool for shrinking Java bytecode and optimizing code. It processes Java class files by removing unused classes, fields, methods, attributes, and instructions, then renaming remaining classes, fields, and methods with short meaningless names. It also preverifies code, producing smaller and faster applications and libraries. Guardsquare describes ProGuard as suitable for Java and Kotlin apps in mobile, embedded, and desktop environments. Build setup is documented for Android Gradle, Java or Kotlin Gradle, Ant, and Maven projects, and Android's default shrinker, R8, is compatible with ProGuard configuration. ProGuard Playground lets developers experiment with and share keep rules without rebuilding an app. ProGuardCORE is a separate free, open-source library for reading, writing, analyzing, and processing Java bytecode, including Kotlin metadata. Library jars or equivalent paths must be specified as inputs, and ProGuard leaves those libraries unchanged. Code called dynamically through reflection may need to be declared as an entry point in configuration. ProGuard runs on Android, Linux, macOS, and Windows.
Spec sheet
- Purpose
- ProGuard is an open-source command-line tool for shrinking Java bytecode and optimizing code.Read 5 Oct 2026 · guardsquare.com
- License
- The manual provides license information for GPL and a GPL exception.Read 5 Oct 2026 · guardsquare.com
- Headquarters
- Leuven, BelgiumRead 28 Sep 2026 · guardsquare.com
- Maker
- Guardsquare says Eric Lafortune released ProGuard in 2002 and the company was founded in 2014.Read 5 Oct 2026 · guardsquare.com
- Build integrations
- The manual documents setup for Android Gradle, Java or Kotlin Gradle, Ant, and Maven projects.Read 5 Oct 2026 · guardsquare.com
- Configuration limit
- Code invoked dynamically through reflection may need to be specified as entry points in ProGuard configuration.Read 5 Oct 2026 · guardsquare.com
- Library inputs
- ProGuard requires the input's library jars or equivalent library paths to be specified, and leaves those libraries unchanged.Read 5 Oct 2026 · guardsquare.com
- Obfuscation
- ProGuard renames remaining classes, fields, and methods using short meaningless names.Read 5 Oct 2026 · guardsquare.com
- Optimization
- The optimizer optimizes bytecode and removes unused instructions.Read 5 Oct 2026 · guardsquare.com
- Playground
- ProGuard Playground lets developers experiment with and share keep rules without rebuilding the app.Read 5 Oct 2026 · guardsquare.com
- Processing
- It shrinks, optimizes, obfuscates, and preverifies Java class files, producing smaller and faster applications and libraries.Read 5 Oct 2026 · guardsquare.com
- ProGuardCORE
- ProGuardCORE is a free, open-source library for reading, writing, analyzing, and processing Java bytecode, including Kotlin metadata.Read 5 Oct 2026 · guardsquare.com
- R8 compatibility
- The manual states that Android's default shrinker, R8, is compatible with ProGuard configuration.Read 5 Oct 2026 · guardsquare.com
- Shrinking
- The shrinking step detects and removes unused classes, fields, methods, and attributes.Read 5 Oct 2026 · guardsquare.com
- Supported apps
- Guardsquare describes ProGuard as suitable for Java and Kotlin apps on mobile, embedded, and desktop environments.Read 5 Oct 2026 · guardsquare.com
Plans and prices
Strong points and limits
Strong points
- Free, open-source command-line tool.
- Removes unused bytecode elements.
- Compatible with Android R8 configuration.
- Playground supports experimenting with keep rules.
- ProGuardCORE handles Java bytecode and Kotlin metadata.
Limits
- Reflection-based code may need explicit entry points.
- Library jars or paths must be supplied.
- Libraries passed as inputs remain unchanged.
Who it suits
ProGuard suits developers working with Java or Kotlin apps who need bytecode shrinking, optimization, obfuscation, or preverification. Its documented build setups cover Android Gradle, Gradle, Ant, and Maven projects.
Verdict
ProGuard offers several bytecode-processing steps and documented integration paths for common Java build systems. Configuration needs particular attention for reflective calls and library inputs.
Where Specifiction places it
- Code Obfuscation Software#20 of 347.7