Compose Multiplatform 1.10.0 重磅发布!三大核心升级,跨平台开发效率再提升

一次编写,处处预览;一键热更,即时生效。

JetBrains 正式发布 Compose Multiplatform 1.10.0,这是跨平台 UI 框架的又一重要里程碑。本次更新带来了统一 @Preview 注解Navigation 3 导航库Compose Hot Reload 正式版三大核心功能,让多平台开发体验更加顺滑。


统一 @Preview 注解:告别平台差异

更新内容

以往在 Compose Multiplatform 中使用预览功能时,需要针对不同平台使用不同的注解:

  • Desktop 用 androidx.compose.desktop.ui.tooling.preview.Preview
  • 旧版通用 org.jetbrains.compose.ui.tooling.preview.Preview

现在只需一个注解androidx.compose.ui.tooling.preview.Preview,可直接在 commonMain 源集中使用,真正实现"一次编写,处处预览"。

使用方式

步骤 1:更新依赖

build.gradle.kts 中添加:

kotlin 复制代码
commonMain.dependencies {
    implementation(compose.uiTooling)
}

步骤 2:编写预览代码

kotlin 复制代码
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.runtime.Composable

@Preview
@Composable
fun GreetingPreview() {
    MaterialTheme {
        Text("Hello, Compose Multiplatform!")
    }
}

步骤 3:迁移旧代码(IDE 自动提示)

IDE 会自动检测旧注解并提供 Quick Fix,一键完成迁移。


更新内容

Navigation 3 是一套全新的导航库 ,与传统 Navigation 2 最大的区别在于:可以直接操作导航栈

不再需要通过隐晦的 navigate() 方法传递参数,而是像操作普通列表一样添加、删除目的地,逻辑更加直观。

使用方式

步骤 1:添加依赖

kotlin 复制代码
commonMain.dependencies {
    implementation("org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha06")
    implementation("org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha06")
}

步骤 2:基础导航示例

kotlin 复制代码
// 定义导航目的地
sealed class Screen {
    object Home : Screen()
    data class Detail(val id: String) : Screen()
}

@Composable
fun AppNavigation() {
    // 创建可观察的导航栈
    var backStack by remember { mutableStateOf(listOf<Screen>(Screen.Home)) }

    NavDisplay(
        backStack = backStack,
        onBack = { backStack = backStack.dropLast(1) }
    ) { screen ->
        when (screen) {
            is Screen.Home -> HomeScreen(
                onNavigateToDetail = { id ->
                    // 直接添加到栈中
                    backStack = backStack + Screen.Detail(id)
                }
            )
            is Screen.Detail -> DetailScreen(screen.id)
        }
    }
}

步骤 3:平台特定手势支持

iOS 返回手势:

kotlin 复制代码
EndEdgePanGestureBehavior(enabled = true)

Web 键盘支持:

  • Esc 键自动返回上一页
  • 自动关闭 Dialog、Popup 等组件

Compose Hot Reload 正式版:即时预览,无需重启

更新内容

Compose Hot Reload 经过长期打磨,现已升级为 v1.0.0 正式版,并且:

  • 内置于 Compose Multiplatform Gradle 插件
  • 默认启用,无需任何配置
  • 支持 Desktop 项目即时热更新

修改代码后,UI 立即刷新,无需重新编译整个应用。

使用方式

对于新项目:

只需引入 Compose 插件,Hot Reload 自动启用:

kotlin 复制代码
plugins {
    id("org.jetbrains.compose") version "1.10.0"
    id("org.jetbrains.kotlin.multiplatform") version "2.1.20"
}

对于现有项目:

如果之前手动添加了 Hot Reload 插件,现在可以安全删除:

kotlin 复制代码
// ❌ 不再需要
plugins {
    id("org.jetbrains.compose-hot-reload") // 可删除
}

版本要求:

  • Kotlin 版本 ≥ 2.1.20
  • 若 Kotlin 版本过低,Hot Reload 自动禁用,不影响编译

其他重要更新

功能 说明 使用场景
Skia 升级至 M138 渲染性能提升,支持更多图形特性 复杂动画、图形密集型应用
iOS UIKit 自适应尺寸 原生组件自动调整大小,无需手动计算 混合 UIKit 组件开发
Web Esc 键导航 浏览器中 Esc 键触发返回 Web 应用导航体验优化
DialogWindow modalityType Desktop 对话框支持模态类型设置 桌面应用窗口管理
AGP 9.0.0 支持 兼容最新 Android Gradle Plugin Android 项目

升级指南

最低版本要求

kotlin 复制代码
// settings.gradle.kts
pluginManagement {
    plugins {
        kotlin("multiplatform") version "2.1.20"  // 最低要求
        id("org.jetbrains.compose") version "1.10.0"
    }
}

依赖别名迁移

从 1.10.0 开始,Gradle 插件中的依赖别名(如 compose.ui)已弃用,建议直接声明版本:

kotlin 复制代码
// ❌ 旧方式(已弃用)
implementation(compose.ui)

// ✅ 新方式
implementation("org.jetbrains.compose.ui:ui:1.10.0")

六、总结

Compose Multiplatform 1.10.0 三大核心升级:

功能 状态 核心价值
统一 @Preview ✅ 稳定 一个注解,跨平台预览
Navigation 3 🧪 Alpha 直接操作导航栈
Hot Reload ✅ 稳定 即时热更新,开发效率翻倍

立即升级,体验更高效的跨平台开发!

相关推荐
tongxh4233 分钟前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
阿拉斯攀登14 分钟前
第 3 篇 保姆级手把手!RK 安卓驱动开发环境搭建(Ubuntu20.04 + 官方 SDK),踩坑全规避
android·驱动开发·瑞芯微·rk安卓驱动
新缸中之脑43 分钟前
使用 AI 进行科学调试
android·人工智能·kotlin
QING6182 小时前
Android Gradle Plugin 9.0 升级指南:告别十年技术债,你准备好了吗?
android·kotlin·gradle
Ehtan_Zheng2 小时前
内存泄漏检测:发现隐藏泄漏的工具
android
拭心2 小时前
Android 17 来了!新特性介绍与适配建议
android
Kapaseker2 小时前
一杯美式理解 Inner Class
android·kotlin
三少爷的鞋3 小时前
为什么 Google 不再推荐 SharedPreferences?答案其实只有一个:锁
android
JMchen1233 小时前
企业级图表组件库完整实现
android·java·经验分享·笔记·canvas·android-studio
草明12 小时前
android 蓝牙连接-兼容旧版本
android