How does this compare to ProGuard?
We get a lot of leverage out of operating on dex directly, as the final step in the build. For instance we can make really good inlining decisions because we know how many virtual registers the caller and callee use.
If you're using third-party crash reporting tools that don't understand that back-map, though, you can always turn off the source stripping. We describe how to do that here: https://github.com/facebook/redex/blob/master/docs/Config.md.