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

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

Минимальная версия Версия по умолчанию Примечания
Грейдл 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 и включает в себя различные исправления ошибок и улучшения производительности. Список важных исправлений ошибок можно найти в соответствующей публикации в блоге Release Updates .

3.4.1 (май 2019 г.)

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

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

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

    • lintChecks : это существующая конфигурация, которую следует использовать для проверок lint, выполняемых только при локальной сборке проекта. Если ранее вы использовали конфигурацию зависимости lintChecks для включения проверок lint в опубликованный AAR-файл, вам необходимо перенести эти зависимости на новую конфигурацию lintPublish , описанную ниже.
    • lintPublish : используйте эту новую конфигурацию в библиотечных проектах для проверок линта, которые вы хотите включить в опубликованный 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 выдаст предупреждение об устаревании. Чтобы убедиться, что вы сможете создавать приложения с мгновенным запуском в будущих версиях плагина, переведите своё приложение с мгновенным запуском на использование плагина Dynamic Feature , который также позволяет публиковать как установленные, так и мгновенные версии приложений из одного пакета Android App Bundle.

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

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

До R8 ProGuard представлял собой этап компиляции, отличный от дексирования и дешугаринга.

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

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

Имейте в виду, что R8 разработан для работы с вашими существующими правилами ProGuard, поэтому вам, скорее всего, не потребуется предпринимать никаких действий, чтобы воспользоваться преимуществами R8. Однако, поскольку это другая технология, нежели ProGuard, разработанная специально для 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
      
    

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

  • ndkCompile устарел: теперь при попытке скомпилировать собственные библиотеки с помощью ndkBuild возникает ошибка сборки. Вместо этого для добавления кода C и C++ в проект следует использовать CMake или ndk-build.

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

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

              android.uniquePackageNames = true
              
            

    Дополнительные сведения об установке имени пакета с помощью плагина Android Gradle см. в разделе Установка идентификатора приложения .