Какая разница между "minifyEnabled" и "useProguard" в Android Plugin для Gradle?

Я вижу, что Android-плагин для Gradle имеет свойство minifyEnabled, а также свойство useProguard, как показано ниже:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard true
        }
    }
}

Какая разница между этими двумя свойствами? Или, вернее, какой смысл каждого?

Ответ 1

Цитата из tools.android.com:

Встроенная усадка

Версия 2.0 Android Plugin для Gradle поставляется с экспериментальным встроенная усадка кода, которая может использоваться вместо ProGuard. встроенная сушка поддерживает быстрые инкрементные прогоны и предназначена для ускорения итерационных циклов. Его можно включить, используя следующий код фрагмент кода:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

Встроенная усадка может удалить только мертвый код, он не запутывается и не оптимизируется. Его можно настроить с использованием тех же файлов, что и ProGuard, но будет игнорировать все флаги, связанные с обфускацией или оптимизация.

В отличие от ProGuard, мы поддерживаем использование встроенной усадки вместе с Мгновенный запуск: в зависимости от проекта он может значительно уменьшаться начальное время сборки и установки. Любые методы, которые становятся доступными после изменения кода появится как недавно добавленный в программу и предотвратите горячую настройку Instant Run.

Ответ 2

Просто включите minifyEnabled, чтобы код был как оптимизирован, так и запутан. Это связано с тем, что useProguard true является значением по умолчанию, поэтому нет необходимости устанавливать его явно.

Смотрите также: Запутывание в Android Studio

Ответ 3

Вам больше не нужен useProguard true.

Сокращение кода с помощью R8 включается по умолчанию, если для свойства minifyEnabled установлено minifyEnabled true.

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

Если вы хотите использовать ProGuard вместо R8. Добавьте эту строку в файл gradle.properties

 android.enableR8=false