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 bloqueandroidLibrary
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ónandroidLibrary
en tu bloquekotlin
. 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 complementocom.android.library
. JetBrains ya no admitirá el uso continuo del complementocom.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:
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.
Abre el archivo
build.gradle.kts
(Kotlin) obuild.gradle
(Groovy) en la raíz de tu módulo de biblioteca de KMP.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 }
Configura el bloque multiplataforma de Kotlin (
kotlin
) para definir el objetivo de Android. Dentro del bloquekotlin
, especifica el destino de Android conandroidLibrary
: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.) ... }
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.