Kotlin Multiplatform Development Help

Compose Multiplatform 1.6.10 新特性

以下是本功能版本的重点内容:

  • 重大变更:新版 Compose 编译器 Gradle 插件

  • 支持包含 Compose Multiplatform 资源的多模块项目

  • 实验性导航库

  • 包含实验性通用 ViewModel 的生命周期库

  • 已知问题:MissingResourceException

完整变更列表请查看 GitHub

依赖项

重大变更:新版 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 的通用导航库现已可用。详情参见文档

本版本的主要限制:

生命周期库

基于 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

辅助功能支持改进

本版本中:

  • 对话框和弹出窗口已正确集成辅助功能,

  • 使用 UIKitViewUIKitViewController 创建的互操作视图现在可被辅助服务访问,

  • 辅助功能 API 支持 LiveRegion 语义,

  • 支持辅助功能滚动

  • 支持 HapticFeedback

iOS 17 及更高版本的选区容器放大镜

iOS 上的 Compose Multiplatform 选区容器现在模拟原生放大工具。

iPhone 聊天应用截图,显示文本放大镜激活状态

对话框居中的软键盘插入

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 版本:

compose.desktop { application { nativeDistributions { macOS { minimumSystemVersion = "12.0" } } } }

详情参见 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 目录,包括项目根目录和模块目录中的目录。

21 四月 2025