Что нового в Compose Multiplatform 1.12.0
Основные нововведения этого выпуска:
Полный список изменений этого выпуска доступен на GitHub. Сведения о конкретных версиях компонентов см. в разделе Зависимости.
Все платформы
Skia обновлена до Milestone 150
Версия Skia, используемая в Compose Multiplatform через Skiko, обновлена до Milestone 150.
В предыдущей версии, использовавшейся в Compose Multiplatform 1.11, была Milestone 144. Изменения между этими версиями можно посмотреть в примечаниях к выпуску.
Это обновление также устраняет конфликты дублирующихся символов в iOS в приложениях, которые уже включают собственную библиотеку Skia (например, в приложениях на основе Chromium).
iOS
Повышена производительность прокрутки ленивых компоновок
В Compose Multiplatform для iOS повышена производительность прокрутки ленивых компоновок. Деактивация элементов списка выполняется вне этапа отрисовки, благодаря чему отрисовка завершается быстрее, а прокрутка становится плавнее.
Веб
Автоматический подбор резервного шрифта
Раньше символы, отсутствующие в загруженных шрифтах приложения, отображались в виде символов-заменителей (□, так называемый «тофу»).
Теперь Compose Multiplatform для веба автоматически загружает по мере необходимости нужные поднаборы шрифта Noto, если при отрисовке встречаются символы, для которых не найден шрифт. После загрузки шрифтов Compose повторно компонує затронутый текст. Обратите внимание: символы-тофу могут ненадолго появиться, пока не будет загружен нужный шрифт.
Настольные платформы
MCP-сервер для ИИ-агентов в Compose Hot Reload
Теперь Compose Hot Reload поставляется с экспериментальным сервером Model Context Protocol (MCP), который позволяет ИИ-агентам для написания кода напрямую взаимодействовать с запущенным приложением Compose.
Раньше, когда ИИ-агент изменял код Compose, не было надежного способа проверить результат: агент не мог убедиться, что горячая перезагрузка прошла успешно, увидеть отрисованный интерфейс или прочитать журналы выполнения и исключения. С MCP-сервером агенты могут запускать перезагрузку, делать снимки экрана, изучать семантическое дерево, имитировать щелчки и ввод данных, а также читать журналы приложения без вашего участия.
Полный список MCP-инструментов, доступных ИИ-агенту, и сведения о подключении см. в разделе MCP-сервер для ИИ-агентов.
API v2 для окон и диалогов
Мы представили новый экспериментальный API v2 для WindowState и DialogState на настольных платформах, устраняющий ряд ограничений существующего API. API v2 доступен в подпакете androidx.compose.ui.window.v2.
API v2 позволяет гибче управлять расположением и размером окон и диалогов. Вы можете:
Выбирать экран, на котором будет отображаться окно
Задавать собственную логику позиционирования и изменения размера, в том числе с учетом исходного размера содержимого
Задавать минимальный и максимальный размер окна
Располагать диалоги относительно родительского окна
API v2 также явно учитывает асинхронный характер изменений состояния окна, разделяя запрошенное и фактическое состояния.
Например, чтобы открыть окно фиксированного размера по центру экрана:
import androidx.compose.material.Text
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.application
import androidx.compose.ui.window.v2.Window
import androidx.compose.ui.window.v2.WindowBoundsProvider
import androidx.compose.ui.window.v2.WindowPositionProvider
import androidx.compose.ui.window.v2.WindowSizeProvider
import androidx.compose.ui.window.v2.rememberWindowState
@OptIn(ExperimentalComposeUiApi::class)
fun main() = application {
val windowState = rememberWindowState(
initialBoundsProvider = WindowBoundsProvider(
positionProvider = WindowPositionProvider.CenteredOnScreen,
sizeProvider = WindowSizeProvider.Fixed(DpSize(400.dp, 200.dp))
)
)
Window(
onCloseRequest = ::exitApplication,
state = windowState,
) {
Text("Hello, World!", fontSize = 48.sp)
}
}
API v2 также позволяет реализовать сценарии, которые ранее были невозможны: например, подгонять размер окна под содержимое и при этом позволять содержимому расширяться (с помощью модификаторов, таких как fillMaxSize()), если окно становится больше. Подробности см. на странице документации API v2 для окон и диалогов.
Зависимости
Библиотека |
Координаты Maven |
Версия Jetpack, на основе которой создана |
|---|---|---|
Runtime |
|
|
UI |
|
|
Foundation |
|
|
Material |
|
|
Material3 |
|
|
Material3 Adaptive |
|
|
Lifecycle |
|
|
Navigation |
|
|
Navigation3 |
|
|
Navigation Event |
|
|
Savedstate |
|
|
WindowManager Core |
|
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/whats-new-compose-112.html