Макет набора исходных файлов Android
Новый макет набора исходных файлов Android был представлен в Kotlin 1.8.0 и стал стандартным в 1.9.0. Следуйте этому руководству, чтобы понять ключевые различия между устаревшими и новыми макетами, а также как мигрировать ваши проекты.
Проверка совместимости
Новый макет требует плагин Android Gradle 7.0 или более поздней версии и поддерживается в Android Studio 2022.3 и более поздних версиях. Проверьте версию вашего плагина Android Gradle и обновите его при необходимости.
Переименование наборов исходных файлов Kotlin
При необходимости переименуйте наборы исходных файлов в вашем проекте, следуя этому шаблону:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|---|---|
|
|
{AndroidSourceSet.name} сопоставляется с {KotlinSourceSet.name} следующим образом:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|
|---|---|---|
main |
androidMain |
androidMain |
test |
androidTest |
androidUnitTest |
androidTest |
androidAndroidTest |
androidInstrumentedTest |
Перемещение файлов исходного кода
При необходимости переместите свои файлы исходного кода в новые каталоги, следуя этому шаблону:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|---|---|
В макете были дополнительные |
|
{AndroidSourceSet.name} сопоставляется с {SourceDirectories included} следующим образом:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|
|---|---|---|
main |
src/androidMain/kotlin |
src/androidMain/kotlin |
test |
src/androidTest/kotlin |
src/androidUnitTest/kotlin |
androidTest |
src/androidAndroidTest/kotlin |
src/androidInstrumentedTest/kotlin |
Перемещение файла AndroidManifest.xml
Если у вас есть файл AndroidManifest.xml в вашем проекте, переместите его в новый каталог, следуя этому шаблону:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|---|---|
src/{AndroidSourceSet.name}/AndroidManifest.xml |
src/{KotlinSourceSet.name}/AndroidManifest.xml |
{AndroidSourceSet.name} сопоставляется с {AndroidManifest.xml location} следующим образом:
Предыдущий макет набора исходных файлов |
Новый макет набора исходных файлов |
|
|---|---|---|
main |
src/main/AndroidManifest.xml |
src/androidMain/AndroidManifest.xml |
debug |
src/debug/AndroidManifest.xml |
src/androidDebug/AndroidManifest.xml |
Проверка взаимосвязи между Android и общими тестами
Новый макет набора исходных файлов Android изменяет взаимосвязь между тестами Android (переименованными в androidInstrumentedTest в новом макете) и общими тестами.
Ранее, взаимосвязь dependsOn между androidAndroidTest и commonTest была стандартной. Это означало следующее:
Код в
commonTestбыл доступен вandroidAndroidTest.Декларации
expectвcommonTestдолжны были иметь соответствующие реализацииactualвandroidAndroidTest.Тесты, объявленные в
commonTest, также выполнялись как тесты Android.
В новом макете набора исходных файлов Android взаимосвязь dependsOn по умолчанию не добавляется. Если вы предпочитаете предыдущее поведение, вручную объявите следующую взаимосвязь в вашем файле build.gradle.kts.
kotlin {
// ...
sourceSets {
val commonTest by getting
val androidInstrumentedTest by getting {
dependsOn(commonTest)
}
}
}
Настройка реализации Android-наборов
Ранее плагин Kotlin Gradle жадно создавал наборы исходных файлов, соответствующие наборам исходных файлов Android, содержащим debug и release типы сборки или пользовательские наборы, такие как demo и full. Это делало наборы исходных файлов доступными с использованием выражений, таких как val androidDebug by getting { ... }.
Новый макет набора исходных файлов Android использует API Android onVariants для создания наборов исходных файлов. Это делает такие выражения недопустимыми, что приводит к ошибкам, например, org.gradle.api.UnknownDomainObjectException: KotlinSourceSet with name 'androidDebug' not found.
Для решения этой проблемы используйте новый API invokeWhenCreated() в вашем файле build.gradle.kts:
kotlin {
// ...
@OptIn(ExperimentalKotlinGradlePluginApi::class)
sourceSets.invokeWhenCreated("androidFreeDebug") {
// ...
}
}
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform-android-layout.html