Раньше единственным способом интегрировать Android в проект KMP было использование обычного плагина Gradle библиотеки Android: com.android.library
. Однако сейчас этот подход устарел в пользу специального плагина com.android.kotlin.multiplatform.library
, также называемого плагином Android-KMP . В этом руководстве объясняется, как перейти на новый плагин .
Ключевые особенности и различия
Плагин Android-KMP ( com.android.kotlin.multiplatform.library
) создан специально для проектов KMP и отличается от традиционного плагина com.android.library
в нескольких ключевых аспектах:
- Одновариантная архитектура: плагин работает с одним вариантом, оптимизируя процесс сборки, удаляя поддержку разновидностей продукта и типов сборки, обычно встречающихся в стандартных проектах библиотеки Android. Это упрощает настройку и повышает производительность сборки библиотек KMP Android.
- Оптимизирован для KMP: плагин специально разработан для многоплатформенных библиотек Kotlin с упором на общий код Kotlin и совместимость. Следовательно, в нем отсутствует поддержка собственных сборок, специфичных для Android, AIDL (языка определения интерфейса Android) и RenderScript, которые обычно не имеют отношения к контексту общего кода KMP.
- Тесты отключены по умолчанию. Чтобы еще больше повысить скорость сборки в многоплатформенной среде, тесты по умолчанию отключены. Вы можете явно включить тесты, если это необходимо для вашего проекта. Это относится как к тестам на хосте (модульные тесты), так и к тестам на устройстве (инструментальные тесты).
- Нет расширения Android верхнего уровня: плагин не создает расширение
android
верхнего уровня в файлах сборки Gradle. Конфигурация осуществляется с помощью блокаandroidLibrary
в многоплатформенном DSL Kotlin, поддерживая согласованную структуру проекта KMP. - Согласие на компиляцию Java: компиляция Java не включена по умолчанию. Если вашей библиотеке KMP требуется компилировать код на основе Java, вы должны явно дать свое согласие, используя API
withJava()
в блоке конфигурацииandroidLibrary
в вашем блокеkotlin
. Это обеспечивает более точный контроль над процессом компиляции и может сократить время сборки, когда компиляция кода на основе Java не требуется.
Преимущества миграции
Плагин Android-KMP предоставляет следующие преимущества для проектов KMP:
- Улучшенная производительность и стабильность сборки. Плагин Android-KMP разработан для оптимизации скорости сборки и повышения стабильности проектов KMP. Его оптимизированная архитектура и ориентация на рабочие процессы KMP способствуют более эффективному и надежному процессу сборки.
- Расширенная интеграция IDE: плагин обеспечивает превосходную интеграцию с Android Studio и другими IDE Kotlin. Это приводит к улучшению завершения кода, навигации, отладки и общего опыта разработчиков при работе с библиотеками KMP Android.
- Упрощенная конфигурация проекта: устраняя специфичные для Android сложности, такие как варианты, плагин Android-KMP упрощает настройку проектов KMP. Это приводит к созданию более чистых и удобных в обслуживании файлов сборки и сокращению времени обучения для разработчиков, впервые знакомых с разработкой KMP для Android. Ранее при интеграции Android в проект KMP с использованием плагина
com.android.library
взаимодействие между плагином Android Gradle и плагином Kotlin Gradle в многоплатформенной структуре иногда приводило к вводящим в заблуждение именам исходных наборов. Например, исходный набор, предназначенный для настройки инструментальных тестов Android, называлсяandroidAndroidTest
. Это соглашение об именах было менее интуитивно понятным для разработчиков, знакомых со стандартными структурами проектов KMP. - Официальное и рекомендуемое решение: плагин
com.android.kotlin.multiplatform.library
является официальной заменой предыдущего метода добавления целевых объектов Android в библиотеки KMP с использованием плагинаcom.android.library
. Продолжение использования плагинаcom.android.library
для KMP больше не будет поддерживаться JetBrains и не будет получать выгоды от будущих обновлений и улучшений.
Примените плагин Android-KMP к проекту
Существует два основных способа применить плагин Android-KMP к вашему проекту: * Для существующих модулей библиотеки KMP отредактируйте файлы Gradle вручную . * Для новых модулей библиотеки KMP создайте новый модуль непосредственно из пользовательского интерфейса Android Studio.
Примените плагин к существующему модулю
Чтобы применить плагин Android-KMP к существующему библиотечному модулю KMP, выполните следующие действия:
Откройте файл TOML каталога версий и добавьте следующее в раздел
plugins
:[plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "KOTLIN_PLUGIN_VERSION" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "ANDROID_KMP_PLUGIN_VERSION" }
Замените KOTLIN_PLUGIN_VERSION и ANDROID_KMP_PLUGIN_VERSION фактическими версиями, которые вы используете.
Откройте файл
build.gradle.kts
(Kotlin) илиbuild.gradle
(Groovy) в корне вашего библиотечного модуля KMP.Примените плагин в верхней части файла в блоке
plugins
:Котлин
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
классный
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Настройте блок Kotlin Multiplatform (
kotlin
), чтобы определить цель Android. В блокеkotlin
укажите цель Android с помощьюandroidLibrary
:Котлин
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
классный
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
После применения плагина и настройки блока
kotlin
синхронизируйте проект Gradle, чтобы применить изменения.
Создайте новый модуль с плагином.
Вы также можете создать новый модуль многоплатформенной библиотеки Kotlin непосредственно в Android Studio. При этом автоматически применяются необходимые плагины, включая плагин Android-KMP. Дополнительные инструкции по созданию нового библиотечного модуля KMP с помощью Android Studio см. в разделе Добавление мультиплатформы Kotlin в существующий проект .
Дополнительную информацию об общей мультиплатформенной экосистеме и более продвинутых конфигурациях можно найти в официальной документации Kotlin Multiplatform .