Плагин 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 Build Tools; 28.0.3 28.0.3 Установите или настройте SDK Build Tools.

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 App Bundle.

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

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

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

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

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

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

Примечание. Если для определенного типа сборки вы установите значение 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…