Переход на плагин Android-KMP

Раньше единственным способом интегрировать 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, выполните следующие действия:

  1. Откройте файл 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 фактическими версиями, которые вы используете.

  2. Откройте файл build.gradle.kts (Kotlin) или build.gradle (Groovy) в корне вашего библиотечного модуля KMP.

  3. Примените плагин в верхней части файла в блоке 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
    }
  4. Настройте блок 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.) ...
    }
  5. После применения плагина и настройки блока kotlin синхронизируйте проект Gradle, чтобы применить изменения.

Создайте новый модуль с плагином.

Вы также можете создать новый модуль многоплатформенной библиотеки Kotlin непосредственно в Android Studio. При этом автоматически применяются необходимые плагины, включая плагин Android-KMP. Дополнительные инструкции по созданию нового библиотечного модуля KMP с помощью Android Studio см. в разделе Добавление мультиплатформы Kotlin в существующий проект .

Дополнительную информацию об общей мультиплатформенной экосистеме и более продвинутых конфигурациях можно найти в официальной документации Kotlin Multiplatform .