Android Gradle Plugin 4.1.0 (август 2020 г.)
Совместимость
| Минимальная версия | Версия по умолчанию | Примечания | |
|---|---|---|---|
| Грэдл | 6.5 | Н/Д | Для получения более подробной информации см. раздел «Обновление Gradle» . |
| Инструменты сборки SDK | 29.0.2 | 29.0.2 | Установите или настройте инструменты сборки SDK. |
| НДК | Н/Д | 21.1.6352462 | Установите или настройте другую версию NDK. |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
Новые функции
В этой версии плагина Android Gradle добавлены следующие новые функции.
Поддержка Kotlin Script DSL
Для улучшения удобства редактирования для пользователей Kotlin buildscript, DSL и API плагина Android Gradle 4.1 теперь определены в наборе интерфейсов Kotlin отдельно от классов их реализации. Это означает, что:
- Теперь возможность присвоения значения null и возможность изменения значения явно объявлены для типов Kotlin.
- Документация, созданная на основе этих интерфейсов, публикуется в справочнике API Kotlin .
- API-интерфейс плагина Android Gradle четко определен, что сделает расширение возможностей сборки Android менее уязвимым в будущем.
Важно: Если вы уже используете скрипты сборки KTS или Kotlin в buildSrc , это может привести к нарушению совместимости исходного кода и возникновению определенных ошибок, которые в предыдущих версиях проявлялись как ошибки времени выполнения.
Типы коллекций, предназначенные для изменения в DSL, теперь определены единообразно следующим образом:
val collection: MutableCollectionType
Это означает, что для некоторых коллекций, которые ранее поддерживали эту функцию, в Kotlin-скриптах больше невозможно писать следующий код:
collection = collectionTypeOf(...)
Однако изменение коллекции поддерживается повсеместно, поэтому collection += … и collection.add(...) теперь должны работать везде.
Если вы обнаружите какие-либо проблемы при обновлении проекта, использующего API и DSL Kotlin для плагина Android Gradle, пожалуйста, сообщите об ошибке .
Экспорт зависимостей C/C++ из AAR-файлов
В плагине Android Gradle 4.0 добавлена возможность импорта пакетов Prefab в зависимости AAR . В AGP 4.1 теперь можно экспортировать библиотеки из внешней нативной сборки в AAR для проекта Android Library.
Для экспорта ваших нативных библиотек добавьте следующее в блок android файла build.gradle вашего проекта библиотеки:
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
В этом примере библиотеки mylibrary и myotherlibrary , полученные либо из сборки ndk-build, либо из внешней нативной сборки CMake, будут упакованы в AAR-файл, созданный в результате сборки, и каждая из них будет экспортировать заголовочные файлы из указанного каталога в зависимые от неё библиотеки.
Примечание: Для пользователей плагина Android Gradle версии 4.0 и выше изменились параметры конфигурации для импорта предварительно собранных нативных библиотек. Дополнительную информацию см. в примечаниях к выпуску версии 4.0 .
Поддержка метаданных Kotlin в R8
Kotlin использует пользовательские метаданные в файлах классов Java для идентификации конструкций языка Kotlin. В R8 теперь есть поддержка для сохранения и перезаписи метаданных Kotlin, что позволяет полностью оптимизировать библиотеки и приложения Kotlin с помощью kotlin-reflect .
Для сохранения метаданных Kotlin добавьте следующие правила сохранения:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
Это даст указание R8 сохранять метаданные Kotlin для всех классов, которые сохраняются напрямую.
Для получения дополнительной информации см. статью «Сокращение библиотек и приложений Kotlin с помощью рефлексии Kotlin с использованием R8 {:.external}» на Medium.
Утверждения в отладочных сборках
При сборке отладочной версии вашего приложения с использованием плагина Android Gradle версии 4.1.0 и выше встроенный компилятор (D8) перепишет код вашего приложения, чтобы включить проверку утверждений во время компиляции, поэтому проверки утверждений всегда будут активны.
Изменения в поведении
Кэш сборки плагина Android Gradle удален
В AGP 4.1 кэш сборки AGP был удален. Ранее введенный в AGP 2.3 в дополнение к кэшу сборки Gradle, кэш сборки AGP был полностью заменен кэшем сборки Gradle в AGP 4.1. Это изменение не влияет на время сборки.
Задача cleanBuildCache , а также свойства android.enableBuildCache и android.buildCacheDir устарели и будут удалены в AGP 7.0. Свойство android.enableBuildCache в настоящее время не оказывает никакого эффекта, в то время как свойство android.buildCacheDir и задача cleanBuildCache будут функциональными до AGP 7.0 для удаления любого существующего содержимого кэша сборки AGP.
Размер приложений значительно уменьшается благодаря использованию технологии сжатия кода.
Начиная с этого релиза, поля из R-классов больше не сохраняются по умолчанию , что может привести к значительному уменьшению размера APK-файлов для приложений, поддерживающих сокращение кода. Это не должно привести к изменению поведения, за исключением случаев, когда вы обращаетесь к R-классам через рефлексию, в этом случае необходимо добавить правила сохранения для этих R-классов.
Свойство android.namespacedRClass переименовано в android.nonTransitiveRClass
Экспериментальный флаг android.namespacedRClass был переименован в android.nonTransitiveRClass .
Этот флаг, заданный в файле gradle.properties , включает в себя пространство имен для каждого класса R библиотеки, так что его класс R будет включать только ресурсы, объявленные в самой библиотеке, и ничего из зависимостей библиотеки, тем самым уменьшая размер класса R для этой библиотеки.
Kotlin DSL: переменная coreLibraryDesugaringEnabled переименована.
Параметр компиляции Kotlin DSL coreLibraryDesugaringEnabled был изменен на isCoreLibraryDesugaringEnabled . Для получения дополнительной информации об этом флаге см. раздел «Поддержка десахаризации API в Java 8+ (Android Gradle Plugin 4.0.0+)» .
Свойства версии удалены из класса BuildConfig в проектах библиотек.
Только для библиотечных проектов свойства BuildConfig.VERSION_NAME и BuildConfig.VERSION_CODE были удалены из сгенерированного класса BuildConfig поскольку эти статические значения не отражали окончательные значения кода и имени версии приложения и, следовательно, вводили в заблуждение. Кроме того, эти значения были отброшены во время слияния манифестов.
В будущей версии плагина Android Gradle свойства versionName и versionCode также будут удалены из DSL для библиотек. В настоящее время нет способа автоматически получить доступ к коду/имени версии приложения из подпроекта библиотеки.
Для модулей приложения изменений нет, вы по-прежнему можете присваивать значения полям versionCode и versionName в DSL; эти значения будут передаваться в поля манифеста и BuildConfig приложения.
Укажите путь к NDK
Вы можете указать путь к локальной установке NDK, используя свойство android.ndkPath в файле build.gradle вашего модуля.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}Если вы используете это свойство вместе со свойством android.ndkVersion , то этот путь должен содержать версию NDK, соответствующую android.ndkVersion .
Изменения в поведении модульных тестов библиотеки
Мы изменили способ компиляции и запуска модульных тестов библиотеки. Теперь модульные тесты библиотеки компилируются и запускаются для классов компиляции/выполнения самой библиотеки, в результате чего модульный тест использует библиотеку так же, как и внешние подпроекты. Такая конфигурация обычно приводит к улучшению качества тестирования.
В некоторых случаях модульные тесты библиотеки, использующие привязку данных, могут обнаружить отсутствие классов DataBindingComponent или BR . Такие тесты необходимо перенести в инструментальный тест в проекте androidTest , поскольку компиляция и запуск этих классов в модульном тесте может привести к некорректным результатам.
io.fabric — устаревший плагин Gradle.
Плагин io.fabric для Gradle устарел и несовместим с версией 4.1 плагина Android Gradle. Для получения дополнительной информации об устаревшем SDK Fabric и переходе на SDK Firebase Crashlytics см. раздел «Обновление до SDK Firebase Crashlytics» .