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

Android:基于Gradle实现不同Flavor的产物管理

根据Flavor切换封装的外部AAR库方案

以下是几种可行的实现方案,解决根据特定Flavor切换对应外部AAR库的需求:

方案一:动态创建Flavor专属配置并绑定AAR

在封装AAR的Module的build.gradle(Groovy)中,先定义与主App一致的Flavors,再通过动态配置为每个Flavor绑定对应AAR:

android {
    flavorDimensions "version"
    productFlavors {
        flavor1 {
            dimension "version"
        }
        flavor2 {
            dimension "version"
        }
    }
}

// 为每个Flavor创建专属配置并添加对应AAR
afterEvaluate {
    android.productFlavors.each { flavor ->
        def flavorConfig = "${flavor.name}RuntimeOnly"
        configurations.maybeCreate(flavorConfig)
        artifacts.add(flavorConfig, file("libs/ExternalLibrary-${flavor.name}.aar"))
    }
}

主App的build.gradle中,按Flavor关联对应配置的依赖:

dependencies {
    flavor1Implementation project(path: ':your-aar-module', configuration: 'flavor1RuntimeOnly')
    flavor2Implementation project(path: ':your-aar-module', configuration: 'flavor2RuntimeOnly')
}

方案二:按Flavor目录存放AAR,通过SourceSets关联

将不同Flavor的AAR分别放在Module的src/flavor1/libs、src/flavor2/libs目录下,通过SourceSets为每个Flavor指定资源目录:

android {
    flavorDimensions "version"
    productFlavors {
        flavor1 {
            dimension "version"
        }
        flavor2 {
            dimension "version"
        }
    }

    sourceSets {
        flavor1 {
            jniLibs.srcDirs = ['src/flavor1/libs']
            dependencies {
                implementation files('src/flavor1/libs/ExternalLibrary-flavor1.aar')
            }
        }
        flavor2 {
            jniLibs.srcDirs = ['src/flavor2/libs']
            dependencies {
                implementation files('src/flavor2/libs/ExternalLibrary-flavor2.aar')
            }
        }
    }
}

主App直接依赖该Module即可,Gradle会自动根据当前Flavor匹配对应目录的AAR:

dependencies {
    implementation project(':your-aar-module')
}

方案三:通过VariantFilter为变体绑定AAR

利用VariantFilter遍历构建变体,直接为每个Flavor变体添加对应AAR依赖:

android {
    flavorDimensions "version"
    productFlavors {
        flavor1 {
            dimension "version"
        }
        flavor2 {
            dimension "version"
        }
    }

    variantFilter { variant ->
        def targetFlavor = variant.flavors[0].name
        variant.variantData.scope.dependencies.add(
            files("libs/ExternalLibrary-${targetFlavor}.aar")
        )
    }
}

// 保留默认配置作为 fallback
configurations.maybeCreate("default")
artifacts.add("default", file("libs/ExternalLibrary-flavor1.aar"))

主App直接依赖Module,构建时会自动匹配当前Flavor对应的AAR。

注意事项

  • 主App与封装Module的Flavor维度、名称必须完全一致,否则无法完成匹配
  • 确保AAR文件路径与代码中定义的路径一致,避免构建时出现文件找不到的错误
  • 若使用Kotlin DSL,语法需做对应调整(如configurations.maybeCreate改为configurations.createIfNotExists)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:27:10