Перейти к основному содержимому

Compose Multiplatform — первая программа

Разработчику Архитектору

Compose Multiplatform — первая программа

Compose Multiplatform — декларативный UI на Kotlin для Android, iOS, Desktop и Web (экспериментально). Один UI-код на нескольких платформах.

База Kotlin: Первая программа · Android Compose: Экосистема · Корутины.


Создание проекта

В Android Studio: File → New → Project → Kotlin Multiplatform App
или шаблон на kmp.jetbrains.com.

Минимальная цель для старта — Desktop (JVM).


Зависимости (фрагмент build.gradle.kts)

plugins {
kotlin("multiplatform") version "1.9.24"
id("org.jetbrains.compose") version "1.6.11"
}

kotlin {
jvm("desktop") {
compilations.all {
kotlinOptions.jvmTarget = "17"
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
}
}
val desktopMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
}
}
}
}

compose.desktop {
application {
mainClass = "MainKt"
}
}

Общий UI (commonMain)

App.kt:

import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

@Composable
fun App() {
var count by remember { mutableStateOf(0) }

MaterialTheme {
Column(
modifier = Modifier.fillMaxSize().padding(24.dp),
verticalArrangement = Arrangement.spacedBy(12.dp)
) {
Text("Compose Multiplatform")
Text("Счётчик: $count")
Button(onClick = { count++ }) {
Text("Увеличить")
}
}
}
}

Точка входа Desktop

desktopMain/kotlin/main.kt:

import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application

fun main() = application {
Window(onCloseRequest = ::exitApplication, title = "Hello CMP") {
App()
}
}
./gradlew :desktopRun

(имя задачи зависит от шаблона — в IDE: Run configuration для desktop target.)


Платформы

TargetСтатус
Androidстабильно (Jetpack Compose)
Desktop JVMстабильно
iOSстабильно (нативный рендер Skia)
Webэкспериментально

Бизнес-логику держите в commonMain, платформенный код — в androidMain, iosMain, desktopMain.


Дальше


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).