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

Compose预览中KotlinReflectionNotSupportedError问题解决咨询

解决Compose Preview里Kotlin反射用不了的问题

为啥会出这问题?

Compose预览的运行环境和APP主进程不是一回事,它用单独的类加载器,只会加载部分依赖。你之前用的implementation依赖范围,不会把kotlin-reflect传递到预览的类路径里,所以预览里调用反射就触发了kotlin.jvm.KotlinReflectionNotSupportedError。

怎么解决?

1. 调整依赖范围

把Gradle里的反射依赖从implementation换成api,这样依赖能传递到所有用到该模块的组件(包括预览环境):

api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

要是不想把这个依赖暴露给其他模块,也可以同时保留主依赖并添加debug环境专属依赖:

implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
debugImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

这样既保证主应用正常使用反射,也能让预览环境获取到反射依赖。

2. 给预览单独配置依赖(针对特殊场景)

如果调整依赖范围后仍未解决,可在模块的build.gradle.kts里给预览单独配置依赖:

composePreview {
    dependencies {
        implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
    }
}

注意:这个配置需要确保你的Compose Gradle插件是较新版本,建议使用最新稳定版。

3. 临时绕开方案(预览不直接用反射)

要是上面的方法都没效果,干脆在预览里用硬编码的模拟数据替代反射逻辑:

@Preview
@Composable
fun SomePreview() {
    // 预览时直接用固定值代替反射结果
    val subClassCount = 3 // 对应你实际反射得到的子类数量
    SomeComposable(subClassCount)
}

// 主应用里正常使用反射
@Composable
fun SomeComposable(subClassCount: Int? = null) {
    val actualCount = subClassCount ?: SomeClass::class.sealedSubclasses.size
    // 其他业务逻辑
}

验证方法

修改依赖后,点击Android Studio中的「Sync Project with Gradle Files」,重新运行预览,检查反射代码是否正常执行。

内容的提问来源于stack exchange,提问作者mexes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24