Я бы порекомендовал ProGuard. Даже без запутывания (которое может значительно сократить имена, используемые в пуле констант), оно может удалить «мертвый код» (неиспользуемые методы) из используемых библиотек и т. Д. (Это также можно использовать для удобного объединения всего вместе).
Требуется немного возиться, чтобы "поправиться", особенно если есть динамически загружаемые классы - но очень рекомендуется. Однако реальная выгода от экономии места «зависит» от того, что можно устранить, и, как правило, дает больше внешних библиотек.
Теперь, для запутывания - он делает столько же, сколько любой обфускатор: делает «декомпиляцию» кода в вещи со значимыми именами невозможным.
Запутывание не сохранит ваш супер-секретный алгоритм и не скроет ваши закрытые ключи, хотя: если JVM (или Dalvik после преобразования) должны это понимать, то и декомпилятор, и любой, кто действительно * 1010 может это понять * хочет получить доступ может. Ваш код может быть даже поднят в форме байт-кода и использован просто через. рефлексия (представьте себе ужасный API с нулевой документацией): любой, кто действительно хочет получить доступ, может. Но, возможно, запутывание сделает эту задачу невыполнимой по цене / выплате: «Это зависит».
Не хотите переводить трассировки стека? Просто: не используйте его для отладки (не так полезно для получения следов от пользователей) или не включайте запутывание (другие преимущества все еще применяются); -)
Удачного кодирования.