Proguard exists since many years and does optimization, shrinking, unused classes and unused methods removal etc. Even obfuscation if you want.
It's been a long time I haven't used it but back in the days I used it for years as part of the build chain and it was pretty flawless.
As I understand it nowadays it's even used for Android builds.