Обновление мультиплатформенных проектов с приложениями для Android для использования AGP 9
При использовании с Android Gradle plugin 9.0 или более поздней версии плагин Kotlin Multiplatform Gradle перестаёт быть совместимым с плагинами com.android.application и com.android.library.
Чтобы обновить проект:
Если точка входа Android сейчас реализована в модуле с общим кодом, выделите её в отдельный модуль, чтобы избежать конфликтов плагинов Gradle.
Переведите модуль с общим кодом на новый плагин библиотеки Android-KMP, созданный специально для мультиплатформенных проектов.
Переход на плагин библиотеки Android-KMP
Ранее для настройки целевой платформы Android в мультиплатформенном модуле требовалось использовать плагин KMP (org.jetbrains.kotlin.multiplatform) вместе с плагином приложения Android (com.android.application) или библиотеки Android (com.android.library).
В AGP 9.0 эти плагины больше не совместимы с KMP, поэтому необходимо перейти на новый плагин библиотеки Android-KMP, созданный специально для KMP.
Как выполнить переход
Инструкции по переходу для библиотек см. в руководстве по Android.
Для перехода проекта приложения Android необходимо, чтобы точка входа Android и общий код находились в правильно настроенных отдельных модулях. Ниже приведено общее руководство по переносу примера приложения, в котором показано:
Включение устаревших API до AGP 10
В краткосрочной перспективе вы можете обеспечить работу проекта с AGP 9.0, включив устаревшие API вручную. Для этого добавьте следующее свойство в файл gradle.properties вашего проекта: android.enableLegacyVariantApi=true.
Устаревшие API будут полностью удалены в AGP 10, выпуск которой, вероятно, состоится во второй половине 2026 года. Завершите переход до этого момента.
Переход на примере приложения
Пример проекта, который вы подготовите для перехода, — приложение Compose Multiplatform, созданное в рамках руководства Создание собственного приложения.
Пример приложения, которое необходимо обновить, находится в ветке main репозитория с примерами.
Итоговая версия приложения с изолированным
androidAppдоступна в ветке new-project-structure. В этой ветке также приведены примеры изолированных модулей приложений для других платформ.
Пример проекта с прежней структурой по умолчанию находится в ветке old-project-structure.
Пример состоит из единственного модуля Gradle (composeApp), содержащего весь общий код и точки входа KMP, а также проекта iosApp с кодом и конфигурацией для iOS.
Чтобы подготовиться к переходу на AGP 9.0, вы выполните следующие действия:
Выделите точку входа приложения Android в отдельный модуль
androidApp.Перенастройте модуль с общим кодом (
composeApp), чтобы использовать плагин библиотеки Android-KMP
Модуль для точки входа приложения Android
Создание и настройка модуля приложения Android
Чтобы создать модуль приложения Android (androidApp):
Создайте каталог
androidAppв корне проекта.В этом каталоге создайте пустой файл
build.gradle.ktsи каталогsrc.-
Добавьте новый модуль в настройки проекта в файле
settings.gradle.kts, добавив в конец файла эту строку:include(":androidApp") В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.
Настройка скрипта сборки приложения Android
Настройте скрипт сборки Gradle для нового модуля:
-
Добавьте плагин Kotlin Android Gradle в каталог версий в файле
gradle/libs.versions.toml:[plugins] kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -
Укажите плагины, необходимые для модуля приложения Android, в файле
androidApp/build.gradle.kts:plugins { alias(libs.plugins.kotlinAndroid) alias(libs.plugins.androidApplication) alias(libs.plugins.composeMultiplatform) alias(libs.plugins.composeCompiler) } -
Убедитесь, что все эти плагины указаны в файле
build.gradle.ktsв корневом каталоге:plugins { alias(libs.plugins.kotlinAndroid) apply false alias(libs.plugins.androidApplication) apply false alias(libs.plugins.composeMultiplatform) apply false alias(libs.plugins.composeCompiler) apply false // ... } -
Чтобы добавить необходимые зависимости, скопируйте существующие зависимости из блока
androidMain.dependencies {}скрипта сборкиcomposeAppи добавьте зависимость от самого модуляcomposeApp. В этом примере результат должен выглядеть так:kotlin { dependencies { implementation(projects.composeApp) implementation(libs.androidx.activity.compose) implementation(libs.compose.uiToolingPreview) } } Скопируйте весь блок
android {}с конфигурацией для Android из файлаcomposeApp/build.gradle.ktsв файлandroidApp/build.gradle.kts.-
Скопируйте параметры компилятора из блока
androidTarget {}файлаcomposeApp/build.gradle.ktsв блокtarget {}файлаandroidApp/build.gradle.kts:kotlin { target { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) } } } -
Измените конфигурацию модуля
composeApp: вместо приложения Android настройте библиотеку Android, поскольку фактически модуль становится библиотекой. В файлеcomposeApp/build.gradle.kts:-
Измените ссылку на плагин Gradle:
alias(libs.plugins.androidApplication)alias(libs.plugins.androidLibrary) -
Удалите строки со свойствами приложения из блока
android.defaultConfig {}:defaultConfig { applicationId = "com.jetbrains.demo" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" }defaultConfig { minSdk = libs.versions.android.minSdk.get().toInt() }
-
В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.
Перенос кода и запуск приложения Android
-
Переместите каталог
composeApp/src/androidMainв каталогandroidApp/src/, учитывая при этом код, который должен оставаться кроссплатформенным:Код точки входа, например
MainActivity.ktв нашем примере, должен находиться в модулеandroidApp, чтобы сборка приложения Android выполнялась корректно.Все объявления expect и actual должны оставаться в исходных наборах общего модуля (
composeAppв нашем примере), чтобы быть доступными на всех платформах. После настройки зависимостиandroidAppотcomposeAppэти объявления также станут доступны в коде точки входа.
Переименуйте каталог
androidApp/src/androidMainвmain.Если всё настроено правильно, импорты в файле
androidApp/src/main/.../MainActivity.ktбудут работать, а код скомпилируется.-
В IntelliJ IDEA или Android Studio среда разработки распознаёт новый модуль и автоматически создаёт новую конфигурацию запуска androidApp. Если этого не произошло, вручную измените конфигурацию запуска Android composeApp:
В раскрывающемся списке конфигураций запуска выберите Изменить конфигурации.
Найдите конфигурацию composeApp в категории Android.
В поле Общие | Модуль замените
demo.composeAppнаdemo.androidApp.
Запустите новую конфигурацию, чтобы убедиться, что приложение работает как ожидалось.
Если всё работает правильно, удалите блок
kotlin.sourceSets.androidMain.dependencies {}из файлаcomposeApp/build.gradle.kts.
Вы выделили точку входа Android в отдельный модуль. Теперь обновите модуль с общим кодом, чтобы использовать новый плагин библиотеки Android-KMP.
Настройка общего модуля для использования плагина библиотеки Android-KMP
Чтобы просто выделить точку входа Android, вы применили плагин com.android.library к общему модулю composeApp. Теперь перейдите на новый плагин мультиплатформенной библиотеки:
-
Добавьте плагин библиотеки Android-KMP в каталог версий в файле
gradle/libs.versions.toml:[plugins] androidMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } -
В файле
composeApp/build.gradle.ktsзамените старый плагин библиотеки Android новым:alias(libs.plugins.androidLibrary)alias(libs.plugins.androidMultiplatformLibrary) -
Чтобы избежать конфликтов при применении плагина, добавьте следующую строку в корневой файл
build.gradle.kts:alias(libs.plugins.androidMultiplatformLibrary) apply false
-
В файле
composeApp/build.gradle.ktsзамените блокkotlin.androidTarget {}блокомkotlin.androidLibrary {}:androidLibrary { namespace = "compose.project.demo.composedemo" compileSdk = libs.versions.android.compileSdk.get().toInt() compilerOptions { jvmTarget.set(JvmTarget.JVM_11) } androidResources { enable = true } } Удалите блок
android {}из файлаcomposeApp/build.gradle.kts, поскольку теперь его заменяет конфигурацияkotlin.androidLibrary {}.В блоке
dependencies {}замените строкуdebugImplementation(libs.compose.uiTooling)наandroidRuntimeClasspath(libs.compose.uiTooling), поскольку новый плагин библиотеки Android KMP не поддерживает варианты сборки.В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.
Убедитесь, что приложение Android работает как ожидалось.
Обновление версии Android Gradle plugin
Когда весь код будет работать с новой конфигурацией:
Если вы следовали инструкциям, конфигурации запуска для новых модулей приложения уже работают. Вы можете удалить устаревшие конфигурации запуска, связанные с модулем
composeApp.-
Обновите версию AGP до 9.* в файле
gradle/libs.versions.toml, например:[versions] agp = "9.0.0"
-
Обновите версию Gradle в файле
gradle/wrapper/gradle-wrapper.propertiesкак минимум до 9.1.0:distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
-
Удалите эту строку из файла
androidApp/build.gradle.kts, поскольку в AGP 9.0 уже встроена поддержка Kotlin и применять плагин Kotlin Android больше не нужно:alias(libs.plugins.kotlinAndroid)
-
В файле
composeApp/build.gradle.ktsобновите пространство имён в блокеkotlin.androidLibrary {}, чтобы оно не конфликтовало с пространством имён приложения. Например:kotlin { androidLibrary { namespace = "compose.project.demo.composedemolibrary" // ... } } В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе скрипта сборки.
Убедитесь, что приложение собирается и запускается с новой версией AGP.
Поздравляем! Вы обновили проект и обеспечили его совместимость с AGP 9.0.
Что дальше
Ознакомьтесь с рекомендуемой структурой проекта, в которой предусмотрено разделение точек входа для любых целевых платформ приложения.
© 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-project-agp-9-migration.html