Spec-Zone.ru › Kotlin 2

Структура наборов исходного кода Android

Новая структура наборов исходного кода Android появилась в Kotlin 1.8.0 и стала стандартной в версии 1.9.0. Следуйте этому руководству, чтобы понять основные различия между устаревшей и новой структурой, а также узнать, как перенести на неё проекты.

Необязательно выполнять все рекомендации — следуйте только тем из них, которые применимы к вашим проектам.

Проверьте совместимость

Для новой структуры требуется Android Gradle plugin версии 7.0 или выше. Она поддерживается в Android Studio 2022.3 и более поздних версиях. Проверьте версию Android Gradle plugin и при необходимости обновите её.

Переименуйте наборы исходного кода Kotlin

При необходимости переименуйте наборы исходного кода в проекте по следующему шаблону:

Прежняя структура наборов исходного кода

Новая структура наборов исходного кода

targetName + AndroidSourceSet.name

targetName + AndroidVariantType

{AndroidSourceSet.name} соответствует {KotlinSourceSet.name} следующим образом:

Прежняя структура наборов исходного кода

Новая структура наборов исходного кода

main

androidMain

androidMain

test

androidTest

androidUnitTest

androidTest

androidAndroidTest

androidInstrumentedTest

Переместите исходные файлы

При необходимости переместите исходные файлы в новые каталоги по следующему шаблону:

Прежняя структура наборов исходного кода

Новая структура наборов исходного кода

Структура включала дополнительные SourceDirectories /kotlin

src/{KotlinSourceSet.name}/kotlin

{AndroidSourceSet.name} соответствует {SourceDirectories included} следующим образом:

Прежняя структура наборов исходного кода

Новая структура наборов исходного кода

main

src/androidMain/kotlin
src/main/kotlin
src/main/java

src/androidMain/kotlin
src/main/kotlin
src/main/java

test

src/androidTest/kotlin
src/test/kotlin
src/test/java

src/androidUnitTest/kotlin
src/test/kotlin
src/test/java

androidTest

src/androidAndroidTest/kotlin
src/androidTest/java

src/androidInstrumentedTest/kotlin
src/androidTest/java, src/androidTest/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 используются onVariants для их создания. Из-за этого такие выражения становятся недопустимыми и приводят к ошибкам, например org.gradle.api.UnknownDomainObjectException: KotlinSourceSet with name 'androidDebug' not found.

Чтобы обойти эту проблему, используйте новый API invokeWhenCreated() в файле build.gradle.kts:

kotlin {
// ...
    @OptIn(ExperimentalKotlinGradlePluginApi::class)
    sourceSets.invokeWhenCreated("androidFreeDebug") {
// ...
    }
}
16 мая 2025
Руководство по совместимости Kotlin MultiplatformВыпуски плагина Kotlin Multiplatform для IDE

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-android-layout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API