Android:配置依赖多Flavor库的项目,无需下游指定missingDimensionStrategy
解决第三方库Flavor维度传递问题的方案
可以做到让下游使用者无需添加额外配置,核心是让你的库自行处理第三方库的Flavor维度,不将这个维度要求传递给下游。下面是两种实用方案:
方案1:限定维度策略仅在库内部生效
在你的库模块的build.gradle中,针对自身解析依赖的配置设置missingDimensionStrategy,这样配置只会作用于当前库,不会传递给下游:
android { // 你的库其他配置(比如defaultConfig、compileSdk等) // 给所有可解析的依赖配置设置维度策略 resolvableConfigurations.all { // 指定要使用的第三方库Flavor维度值 it.missingDimensionStrategy("minApi", "minApi23") // 如果需要兼容多个维度值,可添加多个参数: // it.missingDimensionStrategy("minApi", "minApi23", "minApi18") } } dependencies { // 引入带Flavor的第三方库 implementation 'com.example:third-party-lib:1.0.0' }
方案2:添加内部Flavor并过滤发布变体
给你的库添加和第三方库匹配的Flavor维度,然后只发布你需要的变体,下游拿到的是处理后的单一变体,自然无需处理维度配置:
android { // 定义和第三方库一致的维度 flavorDimensions "minApi" productFlavors { minApi23 { dimension "minApi" // 可按需配置对应参数,比如minSdkVersion 23 } minApi18 { dimension "minApi" // 可按需配置对应参数,比如minSdkVersion 18 } } // 过滤变体,只保留你需要发布的版本(比如只留minApi23) variantFilter { variant -> if (!variant.flavors.any { it.name == "minApi23" }) { setIgnore(true) } } } dependencies { // 引入第三方库,会自动匹配对应Flavor implementation 'com.example:third-party-lib:1.0.0' }
原理说明
默认的missingDimensionStrategy属于模块变体配置的一部分,会被传递给下游依赖。而方案1是针对当前库解析依赖的过程单独配置,不会向外传递;方案2则是让库自身完成和第三方库的Flavor匹配,下游拿到的是单一、无维度要求的变体,所以不需要额外配置。
内容的提问来源于stack exchange,提问作者Roman Nazarevych
相关产品推荐
相关产品推荐

