Плагин Android Gradle 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, плагин не понижает зависимость пути к классам компиляции до библиотеки A версии 1.0, и вы получите сообщение об ошибке. Дополнительные сведения см. в разделе Исправление конфликтов между путями к классам .

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

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

    • Для проектов, использующих Kapt (большинство проектов только на Kotlin и гибридных проектов Kotlin-Java): инкрементная компиляция Java включена, даже если вы используете привязку данных или плагин ретро-лямбда. Обработка аннотаций задачей 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 , чтобы избежать инициализации и настройки задач, которые не требуются для завершения текущей сборки (или задач, которых нет в графе задач выполнения). Например, если у вас есть несколько вариантов сборки, таких как варианты сборки «релиз» и «отладка», и вы создаете «отладочную» версию своего приложения, плагин избегает инициализации и настройки задач для «релизной» версии ваше приложение.

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

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

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

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

  • При создании пакета приложений Android 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.gradle