| Optimization | ProGuard | R8 |
| Remove unused classes/fields/methods | x | x |
| Inline constants | x | x |
| Propagate constants | x | x |
| Remove unused code | x | x |
| Propagate constant arguments | x | |
| Propagate constant fields | x | x |
| Remove write-only fields | x | x |
| Make classes/fields/methods final/... | x | |
| Simplify plain enum types | x | x |
| Simplify basic container classes | x | |
| Merge interfaces with single implementations | x | x |
| Merge classes | x | x |
| Remove unused parameters | x | x |
| Propagate constant return values | x | x |
| Make methods private | x | |
| Make methods static | x | |
| Desynchronize methods | x | |
| Simplify tail recursion | x | |
| Inline methods | x | x |
| Outline common code into new methods | x | |
| Merge code | x | x |
| Backport Java 8 closures | x | x |
| Optimize Kotlin constructs | x | |
| Optimize use of GSON | x | |
| Remove logging calls | x | x |
| Remove logging code | x | / |
| Peephole optimizations | 520 | 6 |