You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Gradle Plugin 3.0.0如何发布所有Flavor变体至Maven?

问题分析与解决方案

这问题我之前升级AGP的时候也踩过坑!核心原因是AGP 3.0彻底重构了库的发布机制,旧的uploadArchives任务已经跟不上多变体的处理逻辑了,咱们一步步理清楚:

AGP 3.0关于库发布的关键变更

  • 废弃旧的maven插件与uploadArchives任务:AGP 3.0开始官方推荐使用maven-publish插件来处理发布,旧的uploadArchives是基于老版maven插件实现的,在多变体(带productFlavors)场景下无法正确识别和发布所有变体。
  • 移除publishNonDefault配置:你提到的这个配置确实被移除了,因为新机制默认支持发布所有变体,但需要通过maven-publish的配置显式声明要发布的组件,而不是依赖旧任务的隐式处理。
  • 变体与组件绑定:每个构建变体(比如freeReleasepaidDebug)现在对应一个独立的SoftwareComponent,需要在发布配置中明确引用这些组件才能完成发布。

为什么移除productFlavors后能正常发布?

当你去掉productFlavors时,项目只有默认的releasedebug构建类型,旧的uploadArchives任务还能勉强兼容识别默认的release组件,所以能正常发布。但一旦引入productFlavors产生多变体,旧任务就无法处理多组件的发布逻辑,导致发布无内容。

正确的配置方案(切换到maven-publish

步骤1:替换插件

把原来的apply plugin: 'maven'替换为maven-publish插件:

apply plugin: 'maven-publish'

步骤2:配置发布规则与仓库

build.gradle中添加publishing块,根据需求配置要发布的变体:

android {
    // 你的原有配置,比如productFlavors和buildTypes
    productFlavors {
        free {}
        paid {}
    }
    buildTypes {
        debug {}
        release {}
    }
}

publishing {
    publications {
        // 方式1:发布所有变体(每个变体生成独立的Maven构件)
        allVariants(MavenPublication) {
            from components.all
            groupId = "com.your.group"
            artifactId = "your-library" // 如果要区分变体,可以改成 "your-library-${variant.name}"
            version = "1.0.0"
        }

        // 方式2:只发布特定变体(比如仅发布所有Release变体)
        /*
        releaseVariants(MavenPublication) {
            from components.findAll { it.name.endsWith('Release') }
            groupId = "com.your.group"
            artifactId = "your-library"
            version = "1.0.0"
        }
        */
    }

    repositories {
        // 配置Maven仓库地址与凭证
        maven {
            url = uri("https://your-maven-repo-url.com")
            credentials {
                username = "your-username"
                password = "your-password"
            }
        }
    }
}

步骤3:执行发布任务

现在你可以通过Gradle任务面板执行对应的发布任务,比如:

  • 发布所有变体:执行publishAllVariantsPublicationToMavenRepository任务
  • 发布单个变体(比如freeRelease):执行publishFreeReleasePublicationToMavenRepository任务

额外注意事项

  • 如果需要自定义POM文件内容(比如添加依赖说明、开发者信息),可以在MavenPublication块中添加pom配置:
    pom {
        name = "Your Library Name"
        description = "A sample library with multiple flavors"
        developers {
            developer {
                id = "your-id"
                name = "Your Name"
                email = "your-email@example.com"
            }
        }
    }
    
  • AGP 3.0+中,uploadArchives任务虽然还存在,但已经被标记为废弃,官方不推荐继续使用,后续版本可能会彻底移除。

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

火山引擎 最新活动