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

    В следующем примере кода используются обе конфигурации зависимостей в локальном проекте библиотеки 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.

  • 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, прочтите FAQ по совместимости с 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 для компиляции собственных библиотек. Вместо этого вам следует использовать CMake или ndk-build для добавления кода C и C++ в ваш проект .

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

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

              android.uniquePackageNames = true
              
            

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