Release构建中禁用Jetpack Compose失败的问题求助
Compose编译版本不兼容问题排查(Debug/Release差异化配置)
我们的应用在Debug构建变体中包含DebugActivity界面,Release变体要求无UI。配置Release关闭Compose特性后,构建时抛出androidx.compose.compiler.plugins.kotlin.IncompatibleComposeRuntimeVersionException,提示Compose Compiler找不到匹配的Runtime版本。已尝试移除Compose BOM并手动声明依赖,问题仍未解决。
报错信息
androidx.compose.compiler.plugins.kotlin.IncompatibleComposeRuntimeVersionException: The Compose Compiler requires the Compose Runtime to be on the class path, but none could be found. The compose compiler plugin you are using (version 1.5.3) expects a minimum runtime version of 1.0.0. at androidx.compose.compiler.plugins.kotlin.VersionChecker.noRuntimeOnClasspathError(VersionChecker.kt:172) at androidx.compose.compiler.plugins.kotlin.VersionChecker.check(VersionChecker.kt:149) at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:68) at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$lambda$1(JvmIrCodegenFactory.kt:222) at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:107) at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:255) at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:59) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.convertToIr(KotlinToJVMBytecodeCompiler.kt:224) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:101) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:47) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:168) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:53) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:460) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:62) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:476) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:399) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:280) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:124) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:636) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:101) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1598) at jdk.internal.reflect.GeneratedMethodAccessor114.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)
当前build.gradle.kts配置
android { buildTypes { release { isMinifyEnabled = false signingConfig = signingConfigs.getByName("release") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) buildFeatures { compose = false } } debug { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = versions.kotlinCompilerExtension } } } } dependencies { // Android implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) // Android Compose debugImplementation(libs.androidx.compose.material3) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.tooling.preview) debugImplementation(libs.androidx.compose.activity) debugImplementation(libs.androidx.compose.viewmodel) debugImplementation(libs.androidx.datastore.preferences) // Testing testImplementation(libs.junit4) androidTestImplementation(libs.androidx.test.ext) androidTestImplementation(libs.androidx.test.espresso.core) // generate kotlin doc dokkaPlugin(libs.dokka) }
解决方案
1. 补充Compose Runtime核心依赖
Debug依赖中缺少Compose Compiler必须的compose-runtime库,这是版本校验的核心依赖。在Debug依赖块中添加:
debugImplementation(libs.androidx.compose.runtime)
2. 隔离Compose Compiler配置到Debug变体
虽然Release中关闭了buildFeatures.compose,但Gradle可能全局应用Compose Compiler插件。需要在Release变体中明确清空Compiler版本,避免触发校验:
release { // ...其他配置 composeOptions { kotlinCompilerExtensionVersion = "" // 清空版本,停止加载Compiler } }
3. 检查全局Compose插件配置
如果项目根目录的build.gradle.kts中全局引入了Compose插件,需确保仅在当前模块的Debug变体中启用,避免全局触发Compose编译流程。
修改后的完整配置示例
android { buildTypes { release { isMinifyEnabled = false signingConfig = signingConfigs.getByName("release") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) buildFeatures { compose = false } composeOptions { kotlinCompilerExtensionVersion = "" } } debug { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = versions.kotlinCompilerExtension } } } } dependencies { // Android implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) // Android Compose debugImplementation(libs.androidx.compose.runtime) // 新增核心Runtime依赖 debugImplementation(libs.androidx.compose.material3) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.tooling.preview) debugImplementation(libs.androidx.compose.activity) debugImplementation(libs.androidx.compose.viewmodel) debugImplementation(libs.androidx.datastore.preferences) // Testing testImplementation(libs.junit4) androidTestImplementation(libs.androidx.test.ext) androidTestImplementation(libs.androidx.test.espresso.core) // generate kotlin doc dokkaPlugin(libs.dokka) }
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

