Spec-Zone.ru › Kotlin 1.9

Макет набора исходных файлов Android

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

Вам не нужно реализовывать все предложения, только те, которые применимы к вашим конкретным проектам.

Проверка совместимости

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

Переименование наборов исходных файлов Kotlin

При необходимости переименуйте наборы исходных файлов в вашем проекте, следуя этому шаблону:

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

Новый макет набора исходных файлов

targetName + AndroidSourceSet.name

targetName + AndroidVariantType

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

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

Новый макет набора исходных файлов

main

androidMain

androidMain

test

androidTest

androidUnitTest

androidTest

androidAndroidTest

androidInstrumentedTest

Перемещение файлов исходного кода

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

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

Новый макет набора исходных файлов

В макете были дополнительные /kotlin SourceDirectories

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 использует 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") {
// ...
    }
}
Последнее изменение: 13 июля 2023 г.
Иерархическая структура проекта Добавление зависимостей от многоплатформенных библиотек

© 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

Spec-Zone.ru

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