Cómo migrar al complemento Android-KMP

Anteriormente, la única forma de integrar Android en un proyecto de KMP era usar el complemento de Gradle de la biblioteca de Android normal: com.android.library. Sin embargo, este enfoque ahora dejó de estar disponible y se reemplazó por el complemento com.android.kotlin.multiplatform.library dedicado, también conocido como complemento Android-KMP. En esta guía, se explica cómo migrar al nuevo complemento.

Funciones y diferencias clave

El complemento Android-KMP (com.android.kotlin.multiplatform.library) se adapta específicamente a los proyectos de KMP y difiere del complemento com.android.library tradicional en varios aspectos clave:

  • Arquitectura de variante única: El complemento funciona con una sola variante, lo que optimiza el proceso de compilación, ya que quita la compatibilidad con las variantes de producto y los tipos de compilación que se suelen encontrar en los proyectos de bibliotecas estándar de Android. Esto simplifica la configuración y mejora el rendimiento de la compilación para las bibliotecas de Android de KMP.
  • Optimizado para KMP: El complemento está diseñado específicamente para bibliotecas de Kotlin multiplataforma, con enfoque en la interoperabilidad y el código Kotlin compartido. En consecuencia, omite la compatibilidad con compilaciones nativas específicas de Android, AIDL (lenguaje de definición de interfaz de Android) y RenderScript, que no suelen ser relevantes en un contexto de código compartido de KMP.
  • Pruebas inhabilitadas de forma predeterminada: Para mejorar aún más la velocidad de compilación en un entorno multiplataforma, las pruebas están inhabilitadas de forma predeterminada. Puedes habilitar pruebas de forma explícita si es necesario para tu proyecto. Esto se aplica tanto a las pruebas en el host (pruebas de unidades) como a las pruebas en el dispositivo (pruebas de instrumentación).
  • Sin extensión de Android de nivel superior: El complemento no crea una extensión android de nivel superior en tus archivos de compilación de Gradle. La configuración se controla con un bloque androidLibrary dentro de la DSL multiplataforma de Kotlin, lo que mantiene una estructura de proyecto KMP coherente.
  • Compilación de Java con solicitud de aceptación: La compilación de Java no está habilitada de forma predeterminada. Si tu biblioteca de KMP necesita compilar código basado en Java, debes habilitarlo de forma explícita con la API de withJava() dentro del bloque de configuración androidLibrary en tu bloque kotlin. Esto permite un control más preciso sobre el proceso de compilación y puede mejorar los tiempos de compilación cuando no se requiere la compilación de código basado en Java.

Beneficios de la migración

El complemento Android-KMP proporciona los siguientes beneficios para los proyectos de KMP:

  • Mejora el rendimiento y la estabilidad de la compilación: El complemento Android-KMP está diseñado para optimizar las velocidades de compilación y mejorar la estabilidad en los proyectos de KMP. Su arquitectura optimizada y su enfoque en los flujos de trabajo de KMP contribuyen a un proceso de compilación más eficiente y confiable.
  • Integración mejorada del IDE: El complemento proporciona una integración superior con Android Studio y otros IDE de Kotlin. Esto genera una mejor finalización de código, navegación, depuración y experiencia general del desarrollador cuando se trabaja con bibliotecas de Android de KMP.
  • Configuración de proyectos simplificada: El complemento Android-KMP quita las complejidades específicas de Android, como las variantes, y simplifica la configuración de los proyectos de KMP. Esto genera archivos de compilación más claros y fáciles de mantener, y una curva de aprendizaje reducida para los desarrolladores que se inician en el desarrollo de Android con KMP. Anteriormente, cuando se integraba Android en un proyecto de KMP con el complemento com.android.library, la interacción entre el complemento de Android para Gradle y el complemento de Kotlin para Gradle dentro de la estructura multiplataforma a veces generaba nombres de conjuntos de orígenes engañosos. Por ejemplo, el conjunto de orígenes dedicado a configurar pruebas de instrumentación de Android se llamó androidAndroidTest. Esta convención de nombres era menos intuitiva para los desarrolladores familiarizados con las estructuras de proyectos de KMP estándar.
  • Solución oficial y recomendada: El complemento com.android.kotlin.multiplatform.library es el reemplazo oficial del método anterior para agregar destinos de Android a las bibliotecas de KMP con el complemento com.android.library. JetBrains ya no admitirá el uso continuo del complemento com.android.library para KMP ni se beneficiará de las actualizaciones y mejoras futuras.

Aplica el complemento Android-KMP a un proyecto

Existen dos formas principales de aplicar el complemento Android-KMP a tu proyecto: * Para los módulos de bibliotecas de KMP existentes, edita tus archivos de Gradle de forma manual. * Para los nuevos módulos de biblioteca KMP, crea el módulo nuevo directamente desde la IU de Android Studio.

Aplica el complemento a un módulo existente

Para aplicar el complemento Android-KMP a un módulo de biblioteca de KMP existente, sigue estos pasos:

  1. Abre el archivo TOML del catálogo de versiones y agrega lo siguiente a la sección 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" }
    

    Reemplaza KOTLIN_PLUGIN_VERSION y ANDROID_KMP_PLUGIN_VERSION por las versiones reales que usas.

  2. Abre el archivo build.gradle.kts (Kotlin) o build.gradle (Groovy) en la raíz de tu módulo de biblioteca de KMP.

  3. Aplica el complemento en la parte superior del archivo dentro del bloque plugins:

    Kotlin

    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }

    Groovy

    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }
  4. Configura el bloque multiplataforma de Kotlin (kotlin) para definir el objetivo de Android. Dentro del bloque kotlin, especifica el destino de Android con androidLibrary:

    Kotlin

    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.) ...
    }

    Groovy

    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. Después de aplicar el complemento y configurar el bloque kotlin, sincroniza tu proyecto de Gradle para aplicar los cambios.

Crea un módulo nuevo con el complemento

También puedes crear un nuevo módulo de biblioteca multiplataforma de Kotlin directamente en Android Studio. Esto aplica los complementos necesarios automáticamente, incluido el complemento Android-KMP. Para obtener más orientación sobre cómo crear un nuevo módulo de biblioteca de KMP con Android Studio, consulta Cómo agregar Kotlin multiplataforma a un proyecto existente.

Para obtener más información sobre el ecosistema multiplataforma general y las configuraciones más avanzadas, consulta la documentación oficial de Kotlin multiplataforma.