Плагин Android Gradle 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, DSL и API плагина Android Gradle 4.1 теперь определены в наборе интерфейсов Kotlin отдельно от классов их реализации. Это означает, что:
- Обнуляемость и изменчивость теперь явно объявлены для типов Kotlin.
- Документация, созданная с помощью этих интерфейсов, опубликована в Kotlin API Reference .
- Поверхность API подключаемого модуля Android Gradle четко определена, чтобы сделать расширение сборок Android менее хрупким в будущем.
Важно: если вы уже внедрили сценарии сборки KTS или используете Kotlin в buildSrc
, это может привести к нарушениям совместимости исходного кода для определенных ошибок, которые в предыдущих выпусках проявлялись как ошибки времени выполнения.
Типы коллекций, предназначенные для изменения в DSL, теперь единообразно определяются как:
val collection: MutableCollectionType
Это означает, что в скриптах Kotlin для некоторых коллекций, которые ранее это поддерживали, больше нельзя писать следующее:
collection = collectionTypeOf(...)
Однако изменение коллекции поддерживается единообразно, поэтому collection += …
и collection.add(...)
теперь должны работать везде.
Если вы обнаружите какие-либо проблемы при обновлении проекта, в котором используются API-интерфейсы Kotlin плагина Android Gradle и DSL, сообщите об ошибке .
Экспорт зависимостей C/C++ из AAR.
В плагине Android Gradle 4.0 добавлена возможность импорта пакетов Prefab в зависимости AAR . В AGP 4.1 теперь можно экспортировать библиотеки из внешней собственной сборки в AAR для проекта библиотеки Android.
Чтобы экспортировать собственные библиотеки, добавьте следующее в блок 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 .
Поддержка R8 метаданных Kotlin
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 был удален в AGP 4.1. Ранее представленный в 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 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. Дополнительную информацию об устаревшем Fabric SDK и переходе на Firebase Crashlytics SDK см. в разделе Обновление до Firebase Crashlytics SDK .