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

如何使用Android Gradle Plugin 7+及maven-publish插件发布所有flavor变体

AGP 7+ 结合 maven-publish 批量发布多Flavor构建产物方案

前置条件

  • 已升级Android Gradle Plugin版本至7.0及以上
  • 模块级build.gradle中已配置好所需的productFlavors维度与具体flavor规则

完整Gradle配置

以下为Groovy语法示例,Kotlin语法仅语法细节不同,逻辑完全一致:

1. 引入基础插件

在需要发布的模块级build.gradle头部添加插件配置:

plugins {
    id 'com.android.library' // 若发布应用模块的AAB产物,替换为com.android.application即可
    id 'maven-publish'
}

2. 配置Flavor规则示例

android {
    namespace "com.example.myLibrary"
    compileSdk 34

    defaultConfig {
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0.0"
    }

    // 配置Flavor维度,可按需自定义数量和命名
    flavorDimensions "env", "channel"
    productFlavors {
        // 环境维度
        dev {
            dimension "env"
        }
        prod {
            dimension "env"
        }
        // 渠道维度
        google {
            dimension "channel"
        }
        huawei {
            dimension "channel"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

3. 配置maven-publish批量发布规则

afterEvaluate {
    // 遍历所有符合条件的构建变体,这里过滤仅发布release版本,可按需调整过滤规则
    android.components.findAll { component ->
        component.name.contains("Release")
    }.each { component ->
        // 为每个变体生成独立的发布项,避免不同Flavor产物覆盖
        publishing.publications.create(component.name, MavenPublication) {
            from component

            // 配置Maven坐标,可根据Flavor动态调整参数避免冲突
            groupId = "com.example"
            // 示例:将Flavor名拼接到artifactId上,区分不同变体
            artifactId = "my-library-${component.name.toLowerCase().replace("release", "")}"
            version = android.defaultConfig.versionName

            // 可选:自定义Pom信息
            pom {
                name = "My Library ${component.name}"
                description = "Multi-flavor build of My Library for ${component.name}"
            }
        }
    }

    // 配置目标Maven仓库地址,支持本地仓库、私有私服等
    publishing.repositories {
        maven {
            // 示例:发布到项目根目录的local-maven文件夹
            url = "${rootProject.projectDir}/local-maven"
            // 若为需要认证的私服,添加以下凭证配置
            /*
            credentials {
                username = "your_account"
                password = "your_password"
            }
            */
        }
    }
}

若需要发布debug版本变体,只需删除component过滤规则中的contains("Release")条件即可。

具体操作步骤

  • 同步Gradle配置,确保无报错
  • 批量发布所有已配置的变体:执行Gradle任务 ./gradlew :<你的模块名>:publish
  • 单独发布指定变体:执行Gradle任务 ./gradlew :<你的模块名>:publish<变体名>PublicationToMavenRepository,例如发布devGoogleRelease变体可执行./gradlew :library:publishDevGoogleReleasePublicationToMavenRepository
  • 到配置的Maven仓库地址验证产物是否正常上传,每个Flavor变体都会生成独立的GAV坐标,不会互相覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:48:02