Ответ 1
[ОБНОВЛЕНИЕ]
**
Когда вы создаете свое приложение, используя версию плагина Android gradle> 3.4.0, плагин выбирает R8 для оптимизации и обфускации кода. Теперь правила можно настроить в файлах proguard-rules.pro или proguard-app.conf. правила, указывающие, что исключить из запутывания, аналогичны тем, которые использовались ранее в proguard.cfg.
Вы можете импортировать ваши файлы proguard в ваш build.gradle, например,
buildTypes{ ... release{ proguardFiles getDefaultProguardFile( 'proguard-android-optimize.txt'), 'proguard-rules.pro' } }
R8 подхватывает все существующие файлы правил proguard, если они включены в build.gradle. Вы также можете настроить, какие кусочки нужно скрыть для разных вкусов продукта, которые у вас могут быть.
**
[СТАРЫЙ, НО СООТВЕТСТВУЮЩИЙ ИНФОРМАЦИИ]
Proguard - это инструмент, который поможет вам запутать ваш код. Это входит в ваши инструменты Android, и вам просто нужно активировать его. Эта ссылка и эта помогут в дальнейшем.
Конфигурации Proguard по умолчанию (в proguard.cfg) будет достаточно, чтобы достаточно запутать ваш код. Однако, возможно, вы захотите настроить конфигурацию Proguard, когда у вас есть методы/классы, к которым осуществляется динамический доступ.
Например, для доступа к классам/методам с помощью Reflection вам потребуется код, который должен быть целым. Иногда вы можете столкнуться с ClassNotFoundException, если proguard его запутывает.
Если у вас есть классы, к которым обращаются в файлах AndroidManifest/Layout, вы должны помешать proguard их запутать.
Это можно сделать, добавив
-keep public class <MyPackage.MyClass>
на ваш proguard.cfg.
**
В то время как Proguard затрудняет статический анализ, DexGuard защищает как от статического, так и от динамического анализа. DexGuard специально для приложений для Android и доступен только для коммерческого использования, в то время как Proguard имеет открытый исходный код и предназначен для любой обфускации/оптимизации java-байт-кода.