Spec-Zone.ru › Kotlin 2

Обновление мультиплатформенных проектов с приложениями для Android для использования AGP 9

При использовании с Android Gradle plugin 9.0 или более поздней версии плагин Kotlin Multiplatform Gradle перестаёт быть совместимым с плагинами com.android.application и com.android.library.

Чтобы обновить проект:

  • Если точка входа Android сейчас реализована в модуле с общим кодом, выделите её в отдельный модуль, чтобы избежать конфликтов плагинов Gradle.

  • Переведите модуль с общим кодом на новый плагин библиотеки Android-KMP, созданный специально для мультиплатформенных проектов.

Поддержка AGP 9.0.0 появилась в Android Studio начиная с Otter 3 Feature Drop 2025.2.3. Ожидается, что IntelliJ IDEA будет поддерживать AGP 9.0.0 в первом квартале 2026 года.

Переход на плагин библиотеки 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 и общий код находились в правильно настроенных отдельных модулях. Ниже приведено общее руководство по переносу примера приложения, в котором показано:

  • Как выделить точку входа приложения 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):

  1. Создайте каталог androidApp в корне проекта.

  2. В этом каталоге создайте пустой файл build.gradle.kts и каталог src.

  3. Добавьте новый модуль в настройки проекта в файле settings.gradle.kts, добавив в конец файла эту строку:

    include(":androidApp")
    
  4. В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.

Настройка скрипта сборки приложения Android

Настройте скрипт сборки Gradle для нового модуля:

  1. Добавьте плагин Kotlin Android Gradle в каталог версий в файле gradle/libs.versions.toml:

    [plugins]
    kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
    
  2. Укажите плагины, необходимые для модуля приложения Android, в файле androidApp/build.gradle.kts:

    plugins {
       alias(libs.plugins.kotlinAndroid)
       alias(libs.plugins.androidApplication)
       alias(libs.plugins.composeMultiplatform)
       alias(libs.plugins.composeCompiler)
    }
    
  3. Убедитесь, что все эти плагины указаны в файле 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
        // ...
    }
    
  4. Чтобы добавить необходимые зависимости, скопируйте существующие зависимости из блока androidMain.dependencies {} скрипта сборки composeApp и добавьте зависимость от самого модуля composeApp. В этом примере результат должен выглядеть так:

    kotlin {
        dependencies { 
            implementation(projects.composeApp)
            implementation(libs.androidx.activity.compose)
            implementation(libs.compose.uiToolingPreview)
        }
    }
    
  5. Скопируйте весь блок android {} с конфигурацией для Android из файла composeApp/build.gradle.kts в файл androidApp/build.gradle.kts.

  6. Скопируйте параметры компилятора из блока androidTarget {} файла composeApp/build.gradle.kts в блок target {} файла androidApp/build.gradle.kts:

    kotlin {
        target {
            compilerOptions {
                jvmTarget.set(JvmTarget.JVM_11)
            }
        }
    }
    

    Если в скрипте сборки composeApp настроены другие плагины или свойства, перенесите их также в скрипт сборки androidApp.

  7. Измените конфигурацию модуля 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()
              }
          
  8. В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.

Перенос кода и запуск приложения Android

  1. Переместите каталог composeApp/src/androidMain в каталог androidApp/src/, учитывая при этом код, который должен оставаться кроссплатформенным:

    • Код точки входа, например MainActivity.kt в нашем примере, должен находиться в модуле androidApp, чтобы сборка приложения Android выполнялась корректно.

    • Все объявления expect и actual должны оставаться в исходных наборах общего модуля (composeApp в нашем примере), чтобы быть доступными на всех платформах. После настройки зависимости androidApp от composeApp эти объявления также станут доступны в коде точки входа.

  2. Переименуйте каталог androidApp/src/androidMain в main.

  3. Если всё настроено правильно, импорты в файле androidApp/src/main/.../MainActivity.kt будут работать, а код скомпилируется.

  4. В IntelliJ IDEA или Android Studio среда разработки распознаёт новый модуль и автоматически создаёт новую конфигурацию запуска androidApp. Если этого не произошло, вручную измените конфигурацию запуска Android composeApp:

    1. В раскрывающемся списке конфигураций запуска выберите Изменить конфигурации.

    2. Найдите конфигурацию composeApp в категории Android.

    3. В поле Общие | Модуль замените demo.composeApp на demo.androidApp.

  5. Запустите новую конфигурацию, чтобы убедиться, что приложение работает как ожидалось.

  6. Если всё работает правильно, удалите блок kotlin.sourceSets.androidMain.dependencies {} из файла composeApp/build.gradle.kts.

Вы выделили точку входа Android в отдельный модуль. Теперь обновите модуль с общим кодом, чтобы использовать новый плагин библиотеки Android-KMP.

Настройка общего модуля для использования плагина библиотеки Android-KMP

Чтобы просто выделить точку входа Android, вы применили плагин com.android.library к общему модулю composeApp. Теперь перейдите на новый плагин мультиплатформенной библиотеки:

  1. Добавьте плагин библиотеки Android-KMP в каталог версий в файле gradle/libs.versions.toml:

    [plugins]
    androidMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
    
  2. В файле composeApp/build.gradle.kts замените старый плагин библиотеки Android новым:

             alias(libs.plugins.androidLibrary)
         
             alias(libs.plugins.androidMultiplatformLibrary)
         
  3. Чтобы избежать конфликтов при применении плагина, добавьте следующую строку в корневой файл build.gradle.kts:

    alias(libs.plugins.androidMultiplatformLibrary) apply false
    
  4. В файле 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
        }
    }
    
  5. Удалите блок android {} из файла composeApp/build.gradle.kts, поскольку теперь его заменяет конфигурация kotlin.androidLibrary {}.

  6. В блоке dependencies {} замените строку debugImplementation(libs.compose.uiTooling) на androidRuntimeClasspath(libs.compose.uiTooling), поскольку новый плагин библиотеки Android KMP не поддерживает варианты сборки.

  7. В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе.

  8. Убедитесь, что приложение Android работает как ожидалось.

Обновление версии Android Gradle plugin

Когда весь код будет работать с новой конфигурацией:

  1. Если вы следовали инструкциям, конфигурации запуска для новых модулей приложения уже работают. Вы можете удалить устаревшие конфигурации запуска, связанные с модулем composeApp.

  2. Обновите версию AGP до 9.* в файле gradle/libs.versions.toml, например:

    [versions]
    agp = "9.0.0"
    
  3. Обновите версию Gradle в файле gradle/wrapper/gradle-wrapper.properties как минимум до 9.1.0:

    distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
    
  4. Удалите эту строку из файла androidApp/build.gradle.kts, поскольку в AGP 9.0 уже встроена поддержка Kotlin и применять плагин Kotlin Android больше не нужно:

    alias(libs.plugins.kotlinAndroid)
    
  5. В файле composeApp/build.gradle.kts обновите пространство имён в блоке kotlin.androidLibrary {}, чтобы оно не конфликтовало с пространством имён приложения. Например:

    kotlin {
        androidLibrary {
            namespace = "compose.project.demo.composedemolibrary"
            // ...
        }
    }
    
  6. В главном меню выберите Сборка | Синхронизировать проект с файлами Gradle или нажмите кнопку обновления Gradle в редакторе скрипта сборки.

  7. Убедитесь, что приложение собирается и запускается с новой версией AGP.

Поздравляем! Вы обновили проект и обеспечили его совместимость с AGP 9.0.

Что дальше

Ознакомьтесь с рекомендуемой структурой проекта, в которой предусмотрено разделение точек входа для любых целевых платформ приложения.

21 мая 2026 г.
Выпуски плагина 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-project-agp-9-migration.html

Spec-Zone.ru

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