KMP项目中Compose @Preview注解引用未解析问题求助
KMP Compose项目@Preview注解无法解析的问题解决
问题原因
@Preview是Android Compose专属的调试注解,仅在Android平台生效。你直接在commonMain(跨平台通用代码目录)中使用它,而当前依赖配置没有针对Android平台正确引入工具库,同时通用代码目录无法识别Android专属API,导致出现"Unresolved reference"错误。
解决方法
1. 修正依赖配置
将ui-tooling相关依赖限定在Android平台范围内,而非放在shared模块的根依赖中。修改shared-ui/build.gradle.kts:
kotlin { android { // 保留原有Android配置 dependencies { debugImplementation("androidx.compose.ui:ui-tooling:1.3.2") implementation("androidx.compose.ui:ui-tooling-preview:1.3.2") } } // 桌面等其他目标平台配置... }
或者也可以在根dependencies块中指定Android平台前缀:
dependencies { androidDebugImplementation("androidx.compose.ui:ui-tooling:1.3.2") androidImplementation("androidx.compose.ui:ui-tooling-preview:1.3.2") }
2. 合理放置预览代码
方案一:直接移到Android专属目录
把带@Preview的代码从commonMain移到androidMain目录下,Android Studio就能正确识别注解和依赖。方案二:用expect/actual实现跨平台兼容
如果想在commonMain中保留预览入口,可通过KMP的expect/actual机制实现:- 在
commonMain中定义预览接口:@Composable expect fun PreviewMyScreen() - 在
androidMain中实现带@Preview的版本:@Composable @Preview(showBackground = true) actual fun PreviewMyScreen() { MyScreen() } - 在
desktopMain中做空实现或直接显示组件:@Composable actual fun PreviewMyScreen() { MyScreen() }
- 在
3. 检查版本兼容性
确保Compose Multiplatform的版本与ui-tooling依赖版本一致。比如你用的是Compose Multiplatform 1.3.x,就对应使用1.3.2的ui-tooling版本;如果升级到Compose Multiplatform 1.4+,也要同步更新ui-tooling的版本号。
内容的提问来源于stack exchange,提问作者Kira Resari
相关产品推荐
相关产品推荐

