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 и включает в себя различные исправления ошибок и улучшения производительности.
Новые функции
Улучшена синхронизация 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 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 , чтобы избежать инициализации и настройки задач, которые не требуются для завершения текущей сборки (или задач, не включенных в граф задач выполнения). Например, если у вас есть несколько вариантов сборки, таких как «release» и «debug», и вы собираете «debug»-версию вашего приложения, плагин избегает инициализации и настройки задач для «release»-версии вашего приложения.
Вызов некоторых старых методов API Variants, таких как
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 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
- В процессе сборки вызывается