Android Gradle Plugin 3.3.0 (январь 2019 г.)

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

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

3.3.3 (июль 2020 г.)

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

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

3.3.2 (март 2019 г.)

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

3.3.1 (февраль 2019 г.)

Это небольшое обновление поддерживает Android Studio 3.3.1 и включает в себя различные исправления ошибок и улучшения производительности.

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

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

    Например, если путь к классам времени выполнения включает библиотеку A версии 2.0, а путь к классам компиляции включает библиотеку A версии 1.0, плагин автоматически обновляет зависимость пути к классам компиляции до библиотеки A версии 2.0, чтобы избежать ошибок.

    Однако, если путь к классам во время выполнения включает библиотеку A версии 1.0, а путь к классам во время компиляции — библиотеку A версии 2.0, плагин не понижает зависимость от пути к классам во время компиляции до версии 1.0 библиотеки A, и вы получите ошибку. Подробнее см. в разделе «Исправление конфликтов между путями к классам» .

  • Улучшенная инкрементная компиляция Java при использовании процессоров аннотаций: это обновление сокращает время сборки за счет улучшения поддержки инкрементной компиляции Java при использовании процессоров аннотаций.

    Примечание: эта функция совместима с Gradle 4.10.1 и выше, за исключением Gradle 5.1 из-за проблемы Gradle 8194 .

    • Для проектов, использующих Kapt (большинство проектов, написанных только на Kotlin, и гибридных проектов Kotlin-Java): инкрементальная компиляция Java включена даже при использовании привязки данных или плагина Retro-Lambda. Обработка аннотаций задачей Kapt пока не является инкрементальной.

    • Для проектов без использования Kapt (проекты только на Java): если все используемые вами процессоры аннотаций поддерживают инкрементальную обработку аннотаций , инкрементальная компиляция Java включена по умолчанию. Чтобы отслеживать внедрение инкрементального процессора аннотаций, следите за выпуском Gradle 5277 .

      Однако, если один или несколько процессоров аннотаций не поддерживают инкрементальные сборки, инкрементальная компиляция Java не будет включена. Вместо этого вы можете включить следующий флаг в файл gradle.properties :

      android.enableSeparateAnnotationProcessing=true
                  

      При включении этого флага плагин Android Gradle выполняет обработчики аннотаций в отдельной задаче и позволяет задаче компиляции Java выполняться постепенно.

  • Улучшенная отладочная информация при использовании устаревшего API: когда плагин обнаруживает, что вы используете API, который больше не поддерживается, он теперь может предоставлять более подробную информацию, которая поможет вам определить, где этот API используется. Чтобы увидеть дополнительную информацию, необходимо включить в файл gradle.properties вашего проекта следующее:

              android.debug.obsoleteApi=true
            

    Вы также можете включить флаг, передав -Pandroid.debug.obsoleteApi=true из командной строки.

  • Вы можете запустить инструментальные тесты на функциональных модулях из командной строки.

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

  • Настройка отложенных задач: плагин теперь использует новый API Gradle для создания задач, чтобы избежать инициализации и настройки задач, которые не требуются для завершения текущей сборки (или задач, не входящих в график выполнения). Например, если у вас есть несколько вариантов сборки, например, «релиз» и «отладка», и вы собираете «отладочную» версию приложения, плагин избегает инициализации и настройки задач для «релизной» версии приложения.

    Вызов некоторых старых методов в API Variants, таких как variant.getJavaCompile() , может по-прежнему принудительно запрашивать конфигурацию задачи. Чтобы убедиться, что ваша сборка оптимизирована для ленивой конфигурации задачи, вызовите новые методы, которые возвращают объект TaskProvider , например variant.getJavaCompileProvider() .

    Если вы выполняете пользовательские задачи по сборке, узнайте, как адаптироваться к новому API Gradle для создания задач .

  • Для данного типа сборки при установке значения useProguard false плагин теперь использует R8 вместо ProGuard для сжатия и обфускации кода и ресурсов вашего приложения. Чтобы узнать больше о R8, прочтите эту запись в блоге Android Developer's Blog.

  • Более быстрая генерация классов R для библиотечных проектов: Раньше плагин Android Gradle генерировал файл R.java для каждой зависимости проекта, а затем компилировал эти классы R вместе с другими классами приложения. Теперь плагин генерирует JAR-файл, содержащий скомпилированный класс R вашего приложения, напрямую, без предварительного создания промежуточных классов R.java . Эта оптимизация может значительно повысить производительность сборки проектов, включающих множество подпроектов и зависимостей библиотек, а также ускорить индексацию в Android Studio.

  • При сборке Android App Bundle APK-файлы, созданные из этого пакета приложений для Android 6.0 (уровень API 23) или выше, теперь по умолчанию включают несжатые версии ваших нативных библиотек. Эта оптимизация устраняет необходимость копирования библиотеки устройством и, таким образом, уменьшает размер вашего приложения на диске. Если вы предпочитаете отключить эту оптимизацию, добавьте в файл gradle.properties следующее:

    android.bundle.enableUncompressedNativeLibs = false
            
  • Плагин обеспечивает установку минимальных версий некоторых сторонних плагинов.

  • Синхронизация проекта с одним вариантом : синхронизация проекта с конфигурацией сборки — важный шаг, позволяющий Android Studio понять структуру вашего проекта. Однако для крупных проектов этот процесс может занять много времени. Если в вашем проекте используется несколько вариантов сборки, теперь вы можете оптимизировать синхронизацию проекта, ограничив её только выбранным в данный момент вариантом.

    Для включения этой оптимизации необходимо использовать Android Studio 3.3 или более позднюю версию с плагином Android Gradle 3.3.0 или более позднюю версию. При соблюдении этих требований IDE предложит включить эту оптимизацию при синхронизации проекта. Оптимизация также включена по умолчанию в новых проектах.

    Чтобы включить эту оптимизацию вручную, выберите Файл > Настройки > Экспериментальный > Gradle ( Android Studio > Настройки > Экспериментальный > Gradle на Mac) и установите флажок Синхронизировать только активный вариант .

    Примечание : эта оптимизация полностью поддерживает проекты, включающие языки Java и C++, а также частично Kotlin. При включении оптимизации для проектов с контентом Kotlin синхронизация Gradle возвращается к использованию полных вариантов внутри.

  • Автоматическая загрузка отсутствующих пакетов SDK : эта функциональность была расширена для поддержки NDK. Подробнее см. в статье «Автоматическая загрузка отсутствующих пакетов с помощью Gradle» .

Исправления ошибок

  • Плагин Android Gradle 3.3.0 исправляет следующие проблемы:

    • Процесс сборки вызывает android.support.v8.renderscript.RenderScript вместо версии AndroidX, несмотря на то, что Jetifier включен.
    • Конфликты из-за androidx-rs.jar включая статически связанную annotation.AnyRes
    • При использовании RenderScript вам больше не придется вручную устанавливать версию Build Tools в файлах build.gradle