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

Новые возможности

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

    Например, если путь к классам времени выполнения включает библиотеку 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, даже если вы используете привязку данных или плагин retro-lambda. Обработка аннотаций задачей Kapt пока не является инкрементальной.

    • Для проектов, не использующих Kapt (проекты только на Java): Если все используемые вами процессоры аннотаций поддерживают инкрементальную обработку аннотаций , инкрементальная компиляция Java включена по умолчанию. Чтобы отслеживать внедрение инкрементального процессора аннотаций, посмотрите Gradle issue 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, созданные из этого app bundle, ориентированные на Android 6.0 (API level 23) или выше, теперь по умолчанию включают несжатые версии ваших собственных библиотек. Эта оптимизация устраняет необходимость для устройства делать копию библиотеки и, таким образом, уменьшает размер вашего приложения на диске. Если вы предпочитаете отключить эту оптимизацию, добавьте следующее в файл gradle.properties :

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

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

    Вам необходимо использовать Android Studio 3.3 или выше с Android Gradle Plugin 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