Плагин Android Gradle 3.4.0 (апрель 2019 г.)

Для работы этой версии плагина Android требуются:

Минимальная версия Версия по умолчанию Примечания
Gradle 5.1.1 5.1.1 Подробнее о том, как обновить Gradle… При использовании Gradle версии 5.0 и более поздних версий размер кучи памяти демона Gradle по умолчанию уменьшается с 1 ГБ до 512 МБ. Это может привести к снижению производительности сборки. Чтобы переопределить это значение по умолчанию, укажите размер кучи демона Gradle в файле gradle.properties проекта.
Инструменты сборки SDK 28.0.3 28.0.3 Установите или настройте инструменты сборки SDK.

3.4.3 (июль 2020 г.)

Это небольшое обновление обеспечивает совместимость с новыми настройками по умолчанию и функциями для видимости пакетов в Android 11.

Подробнее о примечаниях к выпуску 4.0.1.

3.4.2 (июль 2019 г.)

Это небольшое обновление поддерживает Android Studio 3.4.2 и включает различные исправления ошибок и улучшения производительности. Список исправленных ошибок можно найти в блоге об обновлениях.

3.4.1 (май 2019 г.)

Это небольшое обновление поддерживает Android Studio 3.4.1 и включает различные исправления ошибок и улучшения производительности. Список исправленных ошибок можно найти в блоге об обновлениях.

Новые функции

  • Новые конфигурации зависимостей для проверки кода с помощью Lint. Поведение lintChecks изменилось, а новая конфигурация зависимостей lintPublish позволяет более точно выбирать, какие проверки кода с помощью Lint будут включены в библиотеки Android.

    • lintChecks – существующая конфигурация, которую следует использовать для проверок lint, выполняемых только при локальной сборке проекта. Если вы ранее использовали конфигурацию зависимостей lintChecks, чтобы включить проверки lint в опубликованный AAR, вам нужно перенести эти зависимости на новую конфигурацию lintPublish.
    • lintPublish: используйте эту новую конфигурацию в проектах библиотек для проверок lint, которые вы хотите включить в опубликованный AAR, как показано в следующем примере. Это означает, что проекты, в которых используется ваша библиотека, также применяют эти проверки.

    В следующем примере кода используются обе конфигурации зависимостей в локальном проекте библиотеки Android.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • В целом скорость сборки должна увеличиться при выполнении задач упаковки и подписи. Если вы заметили снижение производительности, связанное с этими задачами, сообщите о проблеме.

Изменения в поведении

  • Предупреждение об устаревании плагина Android Instant Apps Feature. Если вы по-прежнему используете плагин com.android.feature для создания приложения с мгновенным запуском, плагин Android Gradle 3.4.0 будет показывать вам предупреждение об устаревании. Чтобы вы могли создавать приложения с мгновенным запуском в будущих версиях плагина, перенесите свое приложение с мгновенным запуском на плагин динамических функций. Он также позволяет публиковать устанавливаемую версию и версию с мгновенным запуском из одного набора Android App Bundle.

  • R8 включен по умолчанию. R8 объединяет десахаризацию, сжатие, обфускацию, оптимизацию и преобразование в формат DEX в один этап. Это позволяет значительно повысить производительность сборки. R8 был представлен в плагине Android Gradle 3.3.0 и теперь включен по умолчанию как для приложений, так и для проектов библиотек Android, использующих плагин 3.4.0 и более поздних версий.

На изображении ниже показан общий процесс компиляции до появления R8.

До R8 ProGuard был отдельным этапом компиляции, отличным от преобразования в формат DEX и десахаризации.

Теперь с помощью R8 десахаризация, сжатие, обфускация, оптимизация и преобразование в формат DEX (D8) выполняются за один шаг, как показано ниже.

R8 выполняет десахаризацию, сжатие, обфускацию, оптимизацию и преобразование в формат DEX за один этап компиляции.

Обратите внимание, что R8 предназначен для работы с существующими правилами ProGuard, поэтому вам, скорее всего, не нужно будет предпринимать никаких действий, чтобы воспользоваться преимуществами R8. Однако, поскольку это другая технология, разработанная специально для проектов для Android, при сжатии и оптимизации может быть удален код, который не был бы удален при использовании ProGuard. Поэтому в такой ситуации вам может понадобиться добавить дополнительные правила, чтобы сохранить этот код в выходных данных сборки.

Если у вас возникли проблемы с использованием R8, ознакомьтесь с часто задаваемыми вопросами о совместимости с R8, чтобы узнать, как их устранить. Если решение не описано, сообщите об ошибке. Чтобы отключить R8, добавьте одну из следующих строк в файл gradle.properties проекта:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Примечание. Если для определенного типа сборки вы зададите значение false для параметра useProguard в файле build.gradle модуля приложения, плагин Android Gradle будет использовать R8 для уменьшения размера кода приложения для этого типа сборки, даже если вы отключите R8 в файле gradle.properties проекта.

  • ndkCompile устарел. Теперь при попытке использовать ndkBuild для компиляции нативных библиотек возникает ошибка сборки. Вместо этого используйте CMake или ndk-build, чтобы добавить в проект код на C и C++.

Известные проблемы

  • Сейчас правильное использование уникальных названий пакетов не контролируется, но в более поздних версиях плагина это будет обязательным. В плагине Android Gradle версии 3.4.0 можно включить проверку того, что в проекте указаны допустимые названия пакетов. Для этого добавьте в файл gradle.properties строку ниже.

              android.uniquePackageNames = true
              
            

    Подробнее о том, как задать идентификатор приложения с помощью плагина Android Gradle…