Это инструмент, задача которого поменять имена объектов, классов, методов, тем самым затрудняя анализ кода для реверс-инженера. Помимо этого он еще и оптимизирует код, удаляя неиспользуемые в программе ресурсы.

С версии Android Gradle 3.4.0 плагин больше не использует ProGuard для оптимизации кода во время компиляции. Вместо этого плагин работает с оптимизатором R8, который разработал Google.

Команды ProGuard полностью совместимы с R8.

Его задачи:

Включение сжатия , обфускации и оптимизации:

android {
    buildTypes {
        getByName("release") {
	          //Включает сжатие кода, запутывание и оптимизацию только 
						//для типа сборки "release".
            isMinifyEnabled = true

            // Включает сжатие ресурсов
            isShrinkResources = true

            // Включает файлы правил ProGuard по умолчанию,
						// упакованные с подключаемым модулем Android Gradle.          
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    ...
}

Дополнительная конфигурация

Когда создаете новый проект или модуль с помощью Android Studio, среда IDE создает <module-dir>/proguard-rules.proфайл, в котором можно указать свои собственные правила. Также можно включить дополнительные правила из других файлов, добавив их к proguardFilesсвойству в build.gradleфайле вашего модуля.

Например, вы можете добавить правила, специфичные для каждого варианта сборки, добавив еще одно proguardFilesсвойство в соответствующий productFlavorблок. Следующий файл Gradle дополняет flavor2 конфигурацией flavor2-rules.pro. Теперь flavor2 использует все три правила ProGuard, потому что также применяются правила из блока release


android {
    ...
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                 
               
                "proguard-rules.pro"
            )
        }
    }
		//Перечислите здесь дополнительные правила ProGuard для данного 
		//типа сборки. По умолчанию,
    //Android Studio создает и включает для вас пустой файл правил 
		//(расположенный в корневом каталоге каждого модуля).
    flavorDimensions.add("version")
    productFlavors {
        create("flavor1") {
            ...
        }
        create("flavor2") {
            proguardFile("flavor2-rules.pro")
        }
    }
}

Конфигурировать, какой файл сохранить

В большинстве случаев файла правил ProGuard по умолчанию ( proguard-android- optimize.txt) достаточно, чтобы R8 удалил только неиспользуемый код. Однако в некоторых ситуациях R8 сложно правильно проанализировать, и он может удалить код, который действительно нужен вашему приложению.

Чтобы исправить ошибки и заставить R8 сохранить определенный код, нужно добавить  [-keep](<https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions>) строку в файл правил ProGuard. Например:

-keep public class MyClass