Kotlin Multiplatform para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Kotlin Multiplatform y para qué sirve?

\n\n

Kotlin Multiplatform (KMP) no es una biblioteca en el sentido clásico, sino una tecnología (SDK y conjunto de herramientas) de JetBrains que permite escribir código común en el lenguaje Kotlin y compilarlo para múltiples plataformas: JVM (Android, servidores), JavaScript (navegadores web, Node.js), Native (iOS, macOS, Windows, Linux, watchOS, tvOS).

\n\n

¿Para qué sirve? En el desarrollo moderno, a menudo es necesario crear aplicaciones para diferentes plataformas. Tradicionalmente, esto significaba escribir código en diferentes lenguajes (Swift para iOS, Java/Kotlin para Android, JavaScript para la web). Kotlin Multiplatform resuelve este problema al permitir extraer la lógica de negocio (solicitudes de red, trabajo con bases de datos, validación de datos, serialización) en un módulo común que se utiliza en todas las plataformas. El código dependiente de la plataforma (UI, trabajo con cámara, sensores) permanece nativo, pero su volumen se reduce significativamente.

\n\n

Ventajas clave:

\n
    \n
  • Reducción del tiempo de desarrollo: Escribes la lógica una vez y la usas en todas partes.
  • \n
  • Base de código unificada: Menos errores, más fácil de mantener y refactorizar.
  • \n
  • Rendimiento nativo: A diferencia de React Native o Flutter, KMP se compila a código nativo, no funciona a través de una capa intermedia.
  • \n
  • Flexibilidad: Puedes empezar poco a poco: extraer solo una biblioteca (por ejemplo, para solicitudes de red) y expandir gradualmente el código común.
  • \n
  • Uso de código existente: Se pueden conectar bibliotecas nativas mediante el mecanismo expect/actual.
  • \n
\n\n

Kotlin Multiplatform es ideal para: aplicaciones móviles (Android + iOS), aplicaciones de servidor (Ktor + KMP), aplicaciones web (Kotlin/JS), aplicaciones de escritorio (Compose Multiplatform) y bibliotecas que deben funcionar en todas partes.

\n\n

Instalación y configuración

\n\n

Kotlin Multiplatform no se instala a través de pip o npm. Es una herramienta de compilación que se configura a través del sistema de compilación Gradle. A continuación se muestra el proceso estándar para crear un proyecto con KMP.

\n\n

1. Instalación de IntelliJ IDEA o Android Studio

\n

Se recomienda usar IntelliJ IDEA Ultimate (la Community Edition también funciona, pero con limitaciones) o Android Studio con el plugin de Kotlin Multiplatform.

\n\n

2. Creación del proyecto

\n

La forma más sencilla es usar el Asistente de Kotlin Multiplatform (herramienta en línea de JetBrains): https://kmp.jetbrains.com/. Selecciona las plataformas deseadas (Android, iOS, Desktop, Web) y descarga la plantilla lista.

\n\n

3. Estructura del proyecto (Gradle)

\n

El archivo de configuración principal es build.gradle.kts (raíz y módulos). Los plugins clave son:

\n
// build.gradle.kts raíz\nplugins {\n    kotlin("multiplatform") version "1.9.22" apply false\n    kotlin("plugin.serialization") version "1.9.22" apply false\n    id("com.android.application") version "8.2.0" apply false\n    id("org.jetbrains.compose") version "1.5.11" apply false\n}\n\n// Módulo shared (código común)\nplugins {\n    kotlin("multiplatform")\n    kotlin("plugin.serialization")\n    id("com.android.library")\n}\n\nkotlin {\n    androidTarget {\n        compilations.all {\n            kotlinOptions {\n                jvmTarget = "1.8"\n            }\n        }\n    }\n\n    listOf(\n        iosX64(),\n        iosArm64(),\n        iosSimulatorArm64()\n    ).forEach {\n        it.binaries.framework {\n            baseName = "shared"\n            isStatic = true\n        }\n    }\n\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")\n                implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\                    

Recommendations