You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:25:18