Compose Multiplatform es un toolkit de interfaz de usuario de JetBrains, construiod con Kotlin, que permite desarrollar aplicaciones para múltiples plataformas incluyendo Android, iOS y escritorio.
1. Organización del código fuente en el proyecto
En un proyecto de Compose Multiplatform, el código se organiza para separar la lógica compartida de la específica de cada plataforma. Un esquema típico incluye los siguientes directorios:
- build.gradle.kts Script principal de configuración de Gradle
- settings.gradle.kts Define los módulos que componen el proyecto
- sharedModules Código Kotlin común para todas las plataformas
- src
- commonMain
- commonTest
- androidApp Módulo para la aplicación Android
- src/main
- kotlin Código fuente Kotlin para Android
- res Recursos nativos de Android
- iosApp Configuración y código para la aplicación iOS
- desktopApp Módulo para la aplicación de escritorio (JVM)
- src/main/kotlin Punto de entrada y lógica para escritorio
- webApp Módulo para la aplicación web (Kotlin/JS)
- src/main/kotlin Código fuente para la plataforma JavaScript
El directorio sharedModules alberga toda la lógica de negocio y los componentes de UI reutilizables. Los directorios como androidApp, iosApp, desktopApp y webApp contienen las adaptaciones y el código de arranque particular de cada entorno.
2. Punttos de entrada por plataforma
Cada plataforma tiene su propio mecanismo para iniciar la aplicación y cargar la interfaz de usuario de Compose.
Para Android: El punto de entrada es una Activity. Por ejemplo, androidApp/src/main/kotlin/PrincipalActivity.kt podría contener:
class PrincipalActivity : ComponentActivity() {
override fun onCreate(savedState: Bundle?) {
super.onCreate(savedState)
setContent {
AppTheme {
MainComposableScreen()
}
}
}
}
Para escritorio (JVM): El arranque se realiza mediante una función main. Un archivo como desktopApp/src/main/kotlin/Lanzador.kt iniciaría la ventana de la aplicación.
Para web (Kotlin/JS): Similar al escritorio, existe una función main en el módulo correspondiente que renderiza el contenido en el navegador.
3. Archivos de configuración clave
build.gradle.kts (Nivel raíz)
Este archivo gestiona la configuración global del proyecto, los plugins y la definición de las plataformas objetivo.
plugins {
kotlin("multiplatform") version "1.9.0"
id("org.jetbrains.compose") version "1.5.0"
}
kotlin {
androidTarget()
jvm("desktop")
js(IR) {
browser()
}
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
}
}
val androidMain by getting
val desktopMain by getting
// Configuraciones adicionales para otras plataformas...
}
}
La sección kotlin especifica las plataformas a compilar. Dentro de sourceSets, se declaran las dependencias para el código compartido y se pueden personalizar para cada conjunto de fuentes específico de una plataforma.
setings.gradle.kts
Este archivo lista todos los módulos que Gradle debe incluir en el proyecto.
rootProject.name = "mi-aplicacion-multiplataforma"
include(":sharedModules")
include(":androidApp")
include(":iosApp")
include(":desktopApp")
include(":webApp")
Esta estructura permite que Gradle entienda las dependencias entre módulos y ejecute tareas de compilación específicas para cada objetivo. Ajustar estos archivos es fundamental para adaptar el proyecto a las necesidades concretas de tu aplicación.