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

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

Минимальная версия Версия по умолчанию Примечания
Gradle 6.7.1 Н/Д Подробнее о том, как обновить Gradle…
Инструменты сборки SDK 30.0.2 30.0.2 Установите или настройте инструменты сборки SDK.
NDK Н/Д 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 4.2 заменяет части компилятора ресурсов AAPT2, что может повысить производительность сборки, особенно на компьютерах с Windows. Новый компилятор ресурсов JVM включен по умолчанию.

Поддержка подписи версий 3 и 4

Плагин Android Gradle 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 версии 4 позволяет быстро развертывать большие APK-файлы с помощью инкрементной установки APK через ADB в Android 11. Этот новый флаг отвечает за подписание APK-файлов в процессе развертывания.

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

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

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

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

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

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

Если вы хотите видеть все выходные данные C/C++, задайте для нового свойства Gradle android.native.buildOutput значение verbose.

Это свойство можно задать в файле gradle.properties или с помощью командной строки.

gradle.properties
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 использует встроенный в Studio JDK. В предыдущих версиях Studio поставлялась в комплекте с JDK 8. В версии 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 для 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 для упаковки сжатых библиотек C/C++

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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