Плагин Android Gradle 4.2.0 (март 2021 г.)

Совместимость

Минимальная версия Версия по умолчанию Примечания
Градл 6.7.1 Н/Д Более подробную информацию см. в разделе Обновление Gradle .
Инструменты сборки SDK 30.0.2 30.0.2 Установите или настройте инструменты сборки SDK.
НДК Н/Д 21.4.7075529 Установите или настройте другую версию NDK.

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

Эта версия плагина Android Gradle включает в себя следующие новые функции.

Язык Java версии 8 по умолчанию

Начиная с версии 4.2, AGP по умолчанию будет использовать уровень языка Java 8. Java 8 предоставляет доступ к ряду новых языковых функций, включая лямбда-выражения, ссылки на методы и статические методы интерфейса. Полный список поддерживаемых функций см. в документации Java 8 .

Чтобы сохранить старое поведение, явно укажите Java 7 в файле build.gradle.kts или build.gradle на уровне модуля:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

Новый компилятор ресурсов JVM

Новый компилятор ресурсов JVM в инструменте Android Gradle plugin 4.2 заменяет части компилятора ресурсов AAPT2 , потенциально улучшая производительность сборки, особенно на машинах Windows. Новый компилятор ресурсов JVM включен по умолчанию.

Теперь поддерживается подпись v3 и v4

Android Gradle Plugin 4.2 теперь поддерживает форматы подписи APK v3 и APK v4 . Чтобы включить один или оба этих формата в вашей сборке, добавьте следующие свойства в файл build.gradle или build.gradle.kts на уровне модуля:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

Подписание APK v4 позволяет быстро развертывать большие APK с помощью инкрементальной установки APK ADB в Android 11. Этот новый флаг отвечает за этап подписания APK в процессе развертывания.

Настройте подписание приложения для каждого варианта

Теперь можно включать и отключать подпись приложений в плагине Android Gradle для каждого варианта.

В этом примере показано, как настроить подпись приложения для каждого варианта с помощью метода onVariants() в Kotlin или Groovy:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

Новое свойство Gradle: android.native.buildOutput

Чтобы уменьшить беспорядок в выводе сборки, AGP 4.2 фильтрует сообщения от собственных сборок, использующих CMake и ndk-build , отображая по умолчанию только вывод компилятора C/C++. Ранее для каждого собранного файла генерировалась строка вывода, что приводило к большому количеству информационных сообщений.

Если вы хотите увидеть весь вывод собственного кода, установите новое свойство Gradle android.native.buildOutput на verbose .

Это свойство можно задать либо в файле gradle.properties , либо через командную строку.

gradle.свойства
android.native.buildOutput=verbose

Командная строка
-Pandroid.native.buildOutput=verbose

Значение этого свойства по умолчанию — quiet .

Изменение поведения файлов gradle.properties

Начиная с AGP 4.2, больше невозможно переопределять свойства Gradle из подпроектов. Другими словами, если вы объявите свойство в файле gradle.properties в подпроекте вместо корневого проекта, оно будет проигнорировано.

Например, в предыдущих выпусках AGP считывал значения из <var>projectDir</var>/gradle.properties , <var>projectDir</var>/app/gradle.properties , <var>projectDir</var>/library/gradle.properties и т. д. Для модулей приложений, если одно и то же свойство Gradle присутствовало как в <var>projectDir</var>/gradle.properties , так и <var>projectDir</var>/app/gradle.properties , то значение из <var>projectDir</var>/app/gradle.properties имело приоритет.

В AGP 4.2 это поведение было изменено, и AGP не будет загружать значения из gradle.properties в подпроектах (например, <var>projectDir</var>/app/gradle.properties ). Это изменение отражает новое поведение Gradle и поддерживает кэширование конфигурации

Дополнительную информацию о настройке значений в файлах gradle.properties см. в документации Gradle .

Совместимость Gradle и изменения конфигурации

При запуске в Android Studio инструмент сборки Gradle использует JDK, входящий в комплект Studio. В предыдущих выпусках JDK 8 был в комплекте со Studio. Однако в версии 4.2 вместо него теперь в комплекте JDK 11. При использовании нового входящего JDK для запуска Gradle это может привести к некоторой несовместимости или повлиять на производительность JVM из-за изменений в сборщике мусора. Эти проблемы описаны ниже.

Примечание: Хотя мы рекомендуем запускать Gradle с JDK 11, можно изменить JDK, используемый для запуска Gradle, в диалоговом окне Project Structure . Изменение этого параметра изменит только JDK, используемый для запуска Gradle, и не изменит JDK, используемый для запуска самой Studio.

Совместимость Studio с плагином Android Gradle (AGP)

Android Studio 4.2 может открывать проекты, использующие AGP 3.1 и выше, при условии, что AGP работает под управлением Gradle 4.8.1 и выше. Для получения дополнительной информации о совместимости с Gradle см. Обновление Gradle .

Оптимизация сборок Gradle для JDK 11

Это обновление JDK 11 влияет на конфигурацию сборщика мусора JVM по умолчанию, поскольку JDK 8 использует параллельный сборщик мусора, а JDK 11 — сборщик мусора G1 .

Для потенциального улучшения производительности сборки мы рекомендуем тестировать сборки Gradle с параллельным сборщиком мусора. В gradle.properties установите следующее:

org.gradle.jvmargs=-XX:+UseParallelGC

Если в этом поле уже установлены другие параметры, добавьте новый параметр:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

Чтобы измерить скорость сборки с различными конфигурациями, см. раздел Профилирование сборки .

Файлы DEX распаковываются в APK, если minSdk = 28 или выше

AGP теперь упаковывает файлы DEX в несжатом виде в APK по умолчанию, когда minSdk = 28 или выше. Это приводит к увеличению размера APK, но приводит к меньшему размеру установки на устройстве, а размер загрузки примерно такой же.

Чтобы заставить AGP вместо этого упаковывать сжатые файлы DEX, вы можете добавить в файл build.gradle следующее:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

Используйте DSL для упаковки сжатых собственных библиотек

Мы рекомендуем упаковывать собственные библиотеки в несжатом виде, поскольку это приводит к меньшему размеру установки приложения, меньшему размеру загрузки приложения и более быстрому времени загрузки приложения для ваших пользователей. Однако, если вы хотите, чтобы плагин Android Gradle упаковывал сжатые собственные библиотеки при сборке вашего приложения, установите useLegacyPackaging на true в файле build.gradle вашего приложения:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

Флаг useLegacyPackaging заменяет атрибут манифеста extractNativeLibs . Для получения дополнительной информации см. примечание к выпуску Собственные библиотеки упакованы некомпрессированными по умолчанию .