Compose Multiplatform 1.6.10 中的新特性
以下是此特性发布的主要亮点:
- 破坏性变更:新的 Compose 编译器 Gradle 插件
- 支持带有 Compose Multiplatform 资源的模块化项目
- 实验性导航库
- 带有实验性公共 ViewModel 的生命周期库
- 已知问题:MissingResourceException
关于此版本的完整变更列表,请参见 GitHub。
依赖项
- Gradle 插件
org.jetbrains.compose
,版本 1.6.10。基于 Jetpack Compose 库: - Lifecycle 库
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0
。基于 Jetpack Lifecycle 2.8.0。 - Navigation 库
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()
。 这些函数旨在帮助从第三方库访问多平台资源。
关于详细信息,请参见拉取请求。
实验性导航库
基于 Jetpack Compose 的公共导航库现已可用。 关于详细信息,请参见文档。
此版本的主要限制:
- Deep links(处理或跟踪它们)尚不受支持。
BackHandler
函数和预测性返回手势仅在 Android 上受支持。
生命周期库
基于 Jetpack lifecycle 的公共生命周期库现已可用,关于详细信息,请参见文档。
该库主要用于支持公共导航功能,但也提供了一个实验性的跨平台 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
标志。
关于详细信息,请参见拉取请求。
iOS
可访问性支持改进
在此版本中:
- 对话框和弹出窗口已与可访问性特性正确集成,
- 使用
UIKitView
和UIKitViewController
创建的互操作视图现在可通过 Accessibility Services 访问, LiveRegion
语义受可访问性 API 支持,- 可访问性滚动受支持,
HapticFeedback
受支持。
iOS 17 及更高版本上的选择容器放大镜
Compose Multiplatform 在 iOS 上的选择容器现在模拟原生放大工具。
用于 Dialog 居中的软键盘内边距
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"
}
}
}
}
关于详细信息,请参见拉取请求。
支持 Proguard 创建 uber JAR 的选项
你现在可以使用 ProGuard Gradle 任务创建 uber JAR(包含应用程序所有依赖项的 JAR 的复杂软件包)。
关于详细信息,请参见代码精简和混淆指南。
已知问题:MissingResourceException
从 Kotlin 1.9.x 切换到 2.0.0(或反之)后,你可能会遇到 org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: ...
错误。 要解决此问题,请删除项目中的所有 build
目录。 这包括位于项目根目录和模块目录中的目录。