如何使用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
相关产品推荐
相关产品推荐

