Android Gradle多flavor维度组合构建类型添加依赖报错如何解决
问题根因
当项目声明了多个flavorDimension时,Gradle会按照你定义flavorDimensions的先后顺序拼接所有维度的风味名称,最终生成的变体依赖配置名必须包含所有维度的风味名+构建类型,不能省略任意一个维度的前缀。你当前配置的flavorDimensions顺序是dimensionOne在前、dimensionTwo在后,所以直接用第二个维度的风味名开头写依赖配置会找不到对应方法。
解决方案
方案1:按命名规则补全全量前缀(适合针对单个具体变体添加依赖)
完整的依赖配置名格式为 [dimensionOne风味名][dimensionTwo风味名][构建类型]Implementation,示例如下:
// 对应 dimensionOneVariantOne + dimensionTwoVariantOne + debug 变体 dimensionOneVariantOnedimensionTwoVariantOneDebugImplementation("maven-library:version") // 对应 dimensionOneVariantOne + dimensionTwoVariantOne + release 变体 dimensionOneVariantOnedimensionTwoVariantOneReleaseImplementation("maven-library:version") // 对应 dimensionOneVariantTwo + dimensionTwoVariantOne + debug 变体 dimensionOneVariantTwodimensionTwoVariantOneDebugImplementation("maven-library:version") // 对应 dimensionOneVariantTwo + dimensionTwoVariantOne + release 变体 dimensionOneVariantTwodimensionTwoVariantOneReleaseImplementation("maven-library:version")
该方案的缺点是需要为不同的dimensionOne风味重复写依赖配置,冗余度高。
方案2:批量匹配指定维度的所有变体(推荐,适配你不需要关心第一个维度的场景)
通过androidComponents的变体匹配能力,统一给所有dimensionTwo为dimensionTwoVariantOne的变体添加依赖,不需要关心第一个维度的取值,也不需要重复声明多次:
androidComponents { onVariants(selector().withFlavor("dimensionTwo" to "dimensionTwoVariantOne")) { variant -> dependencies.add("${variant.name}Implementation", "maven-library:version") } }
该配置会自动匹配所有符合第二个维度要求的变体,包括debug和release构建类型、所有第一个维度的风味,自动注入对应依赖。
补充说明
如果需要调整变体拼接的顺序,可以直接调换flavorDimensions中两个维度的声明顺序,但该操作会全局修改所有变体的命名规则,不建议仅为了适配依赖声明调整。
内容的提问来源于stack exchange,提问作者Lucas Meneghin
相关产品推荐
相关产品推荐

