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

Kotlin Multiplatform имеет плагин Gradle для настройки модуля библиотеки .

Плагин com.android.kotlin.multiplatform.library является официальной заменой предыдущего метода добавления целей Android в библиотеки KMP с использованием обычного плагина Gradle для Android-библиотеки ( com.android.library ).

Предыдущий подход теперь устарел в пользу плагина, также называемого плагином Android-KMP . JetBrains больше не будет поддерживать плагин com.android.library для KMP, и вы не сможете воспользоваться будущими обновлениями и улучшениями.

Чтобы перейти на этот плагин, обратитесь к разделу Применение плагина Android-KMP .

Основные особенности и отличия

Плагин Android-KMP разработан специально для проектов KMP и отличается от стандартного плагина com.android.library по нескольким ключевым аспектам:

  • Архитектура с одним вариантом: плагин использует один вариант, исключая поддержку разновидностей продукта и типов сборки, что упрощает настройку и повышает производительность сборки.

  • Оптимизировано для KMP: плагин разработан для библиотек KMP, фокусируется на общем коде Kotlin и взаимодействии, исключая поддержку собственных сборок, специфичных для Android, AIDL и RenderScript.

  • Тесты отключены по умолчанию: тесты модулей и устройств (инструментария) по умолчанию отключены для повышения скорости сборки. При необходимости их можно включить.

  • Нет расширения Android верхнего уровня: конфигурация обрабатывается блоком androidLibrary в Gradle KMP DSL, что обеспечивает согласованную структуру проекта KMP. Блок расширения android верхнего уровня отсутствует.

  • Включенная компиляция Java: компиляция Java по умолчанию отключена. Используйте withJava() в блоке androidLibrary , чтобы включить её. Это ускоряет сборку, когда компиляция Java не требуется.

Преимущества плагина библиотеки Android-KMP

Плагин Android-KMP обеспечивает следующие преимущества для проектов KMP:

  • Улучшенная производительность и стабильность сборки: разработан для оптимизации скорости сборки и повышения стабильности в проектах KMP. Ориентация на рабочие процессы KMP способствует более эффективному и надежному процессу сборки.

  • Улучшенная интеграция с IDE: обеспечивает улучшенное автодополнение кода, навигацию, отладку и общий опыт разработки при работе с библиотеками KMP для Android.

  • Упрощённая конфигурация проекта: плагин упрощает конфигурацию проектов KMP, устраняя сложности, характерные для Android, такие как варианты сборки. Это приводит к созданию более понятных и удобных для поддержки файлов сборки. Ранее использование плагина com.android.library в проекте KMP могло приводить к появлению запутанных имён исходных наборов, например, androidAndroidTest . Такое соглашение об именовании было менее интуитивно понятным для разработчиков, знакомых со стандартными структурами проектов KMP.

Применить плагин Android-KMP к существующему модулю

Чтобы применить плагин Android-KMP к существующему модулю библиотеки KMP, выполните следующие действия:

  1. Объявите плагины в каталоге версий. Откройте TOML-файл каталога версий (обычно gradle/libs.versions.toml ) и добавьте раздел определений плагинов:

    # To check the version number of the latest Kotlin release, go to
    # https://kotlinlang.org/docs/releases.html
    
    [versions]
    androidGradlePlugin = "8.12.0"
    kotlin = "KOTLIN_VERSION"
    
    [plugins]
    kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
    android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
    
  2. Примените объявление плагина в корневом файле сборки. Откройте файл build.gradle.kts , расположенный в корневом каталоге вашего проекта. Добавьте псевдонимы плагина в блок plugins , используя apply false . Это сделает псевдонимы плагина доступными для всех подпроектов, не применяя логику плагина к самому корневому проекту.

    Котлин

    // Root build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }

    Круто

    // Root build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }
  3. Примените плагин в файле сборки модуля библиотеки KMP. Откройте файл build.gradle.kts в модуле библиотеки KMP и примените плагин в начале файла в блоке plugins :

    Котлин

    // Module-specific build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }

    Круто

    // Module-specific build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }
  4. Настройте целевой проект Android KMP. Настройте блок 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, чтобы изменения вступили в силу.

{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}