Compose Multiplatform 1.6.10 新特性
以下是本功能版本的重点内容:
重大变更:新版 Compose 编译器 Gradle 插件
支持包含 Compose Multiplatform 资源的多模块项目
实验性导航库
包含实验性通用 ViewModel 的生命周期库
已知问题:MissingResourceException
完整变更列表请查看 GitHub。
依赖项
Gradle 插件
org.jetbrains.compose
,版本 1.6.10。基于以下 Jetpack Compose 库:生命周期库
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0
,基于 Jetpack Lifecycle 2.8.0。导航库
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha07
,基于 Jetpack Navigation 2.7.7。
重大变更:新版 Compose 编译器 Gradle 插件
从 Kotlin 2.0.0 开始,Compose Multiplatform 需要使用新版 Compose 编译器 Gradle 插件。详情参见迁移指南。
跨平台特性
资源
稳定的资源库
资源库 API 的大部分功能现已进入稳定状态。
支持包含 Compose Multiplatform 资源的多模块项目
从 Compose Multiplatform 1.6.10 开始,您可以在任意 Gradle 模块和源集中存储资源,并可发布包含资源的项目和库。
要启用多模块支持,请将项目升级至 Kotlin 2.0.0 或更高版本,以及 Gradle 7.6 或更高版本。
多平台资源配置 DSL
您现在可以微调项目中 Res
类的生成:修改类的修饰符和指定包名,以及选择生成条件:始终生成、永不生成或仅在显式依赖资源库时生成。
详情参见文档章节。
生成资源 URI 的公共函数
新增的 getUri()
函数允许您将资源的平台相关 URI 传递给外部库,使其能直接访问文件。详情参见文档。
字符串资源的复数形式
您现在可以定义复数形式(数量字符串)以及其他多平台字符串资源。详情参见文档。
支持三字母语言代码
语言限定符 现在支持 alpha-3 (ISO 639-2) 语言代码。
实验性的图像和字体字节数组函数
您可以试用两个新函数来获取字体和图像的字节数组: getDrawableResourceBytes()
和 getFontResourceBytes()
。这些函数旨在帮助第三方库访问多平台资源。
详情参见 pull request。
实验性导航库
基于 Jetpack Compose 的通用导航库现已可用。详情参见文档。
本版本的主要限制:
尚不支持深度链接 (处理或跟随)。
BackHandler 功能和预测性返回手势 仅在 Android 上支持。
生命周期库
基于 Jetpack 生命周期的通用生命周期库现已可用,详情参见文档。
该库主要为支持通用导航功能而引入,但也提供了实验性的跨平台 ViewModel
实现,并包含可用于项目的通用 LifecycleOwner
接口。
Compose Multiplatform 还提供了通用的 ViewModelStoreOwner
实现。
支持 Kotlin 2.0.0
Kotlin 2.0.0 与新版 Compose 编译器 Gradle 插件一同发布。要在最新编译器版本中使用 Compose Multiplatform,请将插件应用到项目模块中(详情参见迁移指南)。
桌面端
基本支持 BasicTextField2
BasicTextField2
Compose 组件现已在桌面目标上获得基础支持。如果项目确实需要该组件或想进行测试,可以使用它,但请注意可能存在未覆盖的边缘情况。例如, BasicTextField2
目前不支持 IME 事件,因此无法使用中文、日文或韩文的虚拟键盘。
Compose Multiplatform 1.7.0 版本计划全面支持该组件及其他平台。
DialogWindow 的 alwaysOnTop 标志
为避免对话框窗口被覆盖,您现在可以为 DialogWindow
可组合项使用 alwaysOnTop
标志。
详情参见 pull request。
iOS
辅助功能支持改进
本版本中:
对话框和弹出窗口已正确集成辅助功能,
使用
UIKitView
和UIKitViewController
创建的互操作视图现在可被辅助服务访问,辅助功能 API 支持
LiveRegion
语义,支持辅助功能滚动,
支持
HapticFeedback
。
iOS 17 及更高版本的选区容器放大镜
iOS 上的 Compose Multiplatform 选区容器现在模拟原生放大工具。

对话框居中的软键盘插入
Dialog
可组合项的行为现在与 Android 一致:当软键盘出现在屏幕上时,对话框会根据应用窗口的有效高度居中。可通过 DialogProperties.useSoftwareKeyboardInset
属性禁用此功能。
Web
Kotlin/Wasm 支持进入 Alpha 阶段
实验性的 Compose Multiplatform for Web 现已进入 Alpha 阶段:
大部分 Web 功能与 Compose Multiplatform for Desktop 一致。
团队致力于将 Web 平台推向正式发布。
下一步是对大多数组件进行全面的浏览器适配。
按照首个应用教程了解如何设置和运行具有共享 UI 代码的 Web 应用。
基本 IME 键盘支持
Compose Multiplatform 的 Web 目标现在提供对虚拟(IME)键盘的基本支持。
Gradle 插件
可修改 macOS 最低版本
在之前的版本中,如果不包含 Intel 版本,就无法将 macOS 应用上传到 App Store。您现在可以在平台特定的 Compose Multiplatform 选项中为应用设置最低 macOS 版本:
详情参见 pull request。
支持使用 ProGuard 创建 uber JAR
您现在可以使用 ProGuard Gradle 任务创建 uber JAR(包含应用程序和所有依赖项的复杂包)。
详情参见代码精简与混淆教程。
已知问题:MissingResourceException
从 Kotlin 1.9.x 切换到 2.0.0(或反向切换)后,您可能会遇到 org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: ...
错误。要解决此问题,请删除项目中所有的 build
目录,包括项目根目录和模块目录中的目录。