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

Compose Multiplatform Web编译报错:java.lang.AssertionError: Assertion failed

Compose Multiplatform Web编译断言失败问题排查方案

开发Compose Multiplatform项目时,Android、iOS和桌面端运行完全正常,但编译Web平台时抛出java.lang.AssertionError,堆栈跟踪信息如下:

java.lang.AssertionError: Assertion failed
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.checkOnNullability(jsAstUtils.kt:430)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCallArguments(jsAstUtils.kt:401)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCallArguments$default(jsAstUtils.kt:385)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCall(jsAstUtils.kt:163)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsExpressionTransformer.visitCall(IrElementToJsExpressionTransformer.kt:235)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsExpressionTransformer.visitCall(IrElementToJsExpressionTransformer.kt:25)
at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$maybeOptimizeIntoSwitch$2.invoke(IrElementToJsStatementTransformer.kt:114)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$maybeOptimizeIntoSwitch$2.invoke(IrElementToJsStatementTransformer.kt:114)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$visitReturn$lastStatementTransformer$2.invoke(IrElementToJsStatementTransformer.kt:142)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer$visitReturn$lastStatementTransformer$2.invoke(IrElementToJsStatementTransformer.kt:131)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.maybeOptimizeIntoSwitch(IrElementToJsStatementTransformer.kt:114)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitReturn(IrElementToJsStatementTransformer.kt:146)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitReturn(IrElementToJsStatementTransformer.kt:32)
at org.jetbrains.kotlin.ir.expressions.IrReturn.accept(IrReturn.kt:26)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:40)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:32)
at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:25)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateFunction(jsAstUtils.kt:118)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitSimpleFunction(IrFunctionToJsTransformer.kt:30)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitSimpleFunction(IrFunctionToJsTransformer.kt:16)
at org.jetbrains.kotlin.ir.declarations.IrSimpleFunction.accept(IrSimpleFunction.kt:37)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generateMemberFunction(JsClassGenerator.kt:318)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generateClassBlock(JsClassGenerator.kt:129)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generate(JsClassGenerator.kt:64)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:30)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:13)
at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:73)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:25)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:14)
at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:31)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.generateProgramFragment(IrModuleToJsTransformer.kt:355)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.access$generateProgramFragment(IrModuleToJsTransformer.kt:126)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer$makeIrFragmentsGenerators$2$1.invoke(IrModuleToJsTransformer.kt:221)
at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer$makeIrFragmentsGenerators$2$1.invoke(IrModuleToJsTransformer.kt:221)
at org.jetbrains.kotlin.ir.backend.js.ic.CacheUpdater.generateIrFragments(CacheUpdater.kt:759)
at org.jetbrains.kotlin.ir.backend.js.ic.CacheUpdater.actualizeCaches(CacheUpdater.kt:770)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.prepareIcCaches(K2JsIrCompiler.kt:615)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:253)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)

以下是可行的排查和解决步骤:

  • 清理缓存并重新编译
    执行命令:

    ./gradlew clean :web:compileDevelopmentExecutableKotlinJs
    

    或在IDE中执行"Clean Project"后重新构建Web目标。

  • 检查版本兼容性
    确认项目中Kotlin版本与Compose Multiplatform版本完全匹配,版本不兼容常导致JS后端IR转换异常。

  • 定位问题代码
    堆栈指向JS后端转换函数调用时的空断言失败,需排查:

    • 最近新增的跨平台共享代码中涉及空安全的逻辑
    • 平台特定API调用时的空值处理差异
    • 尝试注释可疑代码段,逐步缩小范围找到触发断言的位置
    • 对可能为null的变量显式添加空判断,避免类型不匹配
  • 禁用增量编译(临时方案)
    在项目根目录gradle.properties中添加:

    kotlin.js.incremental=false
    

    增量编译缓存可能引发异常,禁用后重新编译验证。

  • 升级依赖版本
    尝试将Kotlin、Compose Multiplatform升级到最新稳定版,这类断言失败多为编译器后端已知bug,新版本通常已修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:01:05