如何仅为指定构建变体添加Jetpack Compose且兼容API19以上版本
问题原因
你当前的配置逻辑是全局检查Gradle启动参数是否包含MinApi21字符串,只要命中就全局开启Compose编译插件,而不是仅针对minApi21变体开启:
- 日常Debug构建时,你通常是在Android Studio中单独选择某一个变体执行构建,启动参数仅包含对应单风味的任务:运行minApi19变体时判断不命中,不会开启Compose插件;运行minApi21变体时判断命中,开启插件且有对应依赖,所以都能正常构建。
- 生成全量签名Bundle时,Gradle会默认同时执行所有风味的Release构建任务,启动参数同时包含
MinApi19和MinApi21的任务标识,判断条件命中后全局开启了Compose编译插件。但minApi19变体没有引入任何Compose运行时依赖,编译器找不到对应依赖就抛出了该异常。
解决方案
方案1:使用变体专属配置(推荐,兼容全量构建)
删除你原来的全局if判断代码块,改用Android Gradle Plugin提供的变体API,仅针对minApi21风味的变体开启Compose特性:
如果你的AGP版本 >= 7.0,使用以下配置:
android { // 保留原有其他配置不变 flavorDimensions "api" productFlavors{ minApi21 { dimension "api" minSdkVersion 21 versionCode 2000 + android.defaultConfig.versionCode } minApi19 { dimension "api" minSdkVersion 19 versionCode 1000 + android.defaultConfig.versionCode versionNameSuffix ".19" } } } // 新增变体配置逻辑 androidComponents { onVariants(selector().withFlavor("api", "minApi21")) { variant -> variant.buildFeatures.compose = true variant.composeOptions { kotlinCompilerExtensionVersion = "1.1.0-alpha05" } } }
如果你的AGP版本低于7.0,不支持上述变体API,可以改用第二种方案。
方案2:分开执行构建任务
无需修改Gradle配置,打签名包时分别构建两个风味的包:
- 先单独构建minApi19的Release版本,此时启动参数无MinApi21标识,不会开启Compose插件
- 再单独构建minApi21的Release版本,此时判断命中开启插件,依赖齐全可正常构建
额外注意事项
需要确认你项目根目录的Kotlin插件版本和Compose编译器版本匹配,1.1.0-alpha05版本的Compose编译器仅兼容Kotlin 1.5.31,避免出现版本兼容问题。
内容的提问来源于stack exchange,提问作者Baris Akdogan
相关产品推荐
相关产品推荐

