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

Android基于Flavor的Artifact发布至Artifactory报错咨询

问题分析

你的Gradle配置存在两个核心问题:

  1. 语法错误:def ArtifactId = 'demo 缺少闭合单引号,会导致配置解析失败;
  2. 发布逻辑错误:在单个MavenPublication中遍历所有libraryVariants,将所有变体的AAR都加入发布单元,执行artifactoryPublish时会尝试上传所有变体文件,但你仅编译了extendedRelease的AAR,其他变体文件不存在,因此触发报错。

同时原配置还有两处不合理点:

  • repoKey使用GroupId是错误的,应该填写Artifactory中实际存在的仓库Key(比如libs-release-local);
  • Pom依赖收集的是全局implementation/api依赖,而非当前变体的专属依赖,会导致依赖信息不准确。

修复方案(两种可选)

方案一:为每个Flavor的Release变体创建独立发布单元

适合需要频繁发布不同Flavor的场景,每个Flavor对应独立的发布任务:

def GroupId = 'com.example.directory'
def BaseArtifactId = 'demo'
def Version = '0.0.1-IB1'

productFlavors {
    extended {}
    mini {}    
}

publishing {
    publications {
        // 遍历所有Flavor,为每个Flavor的Release变体创建单独的发布配置
        productFlavors.each { flavor ->
            def variantName = "${flavor.name}Release"
            "${flavor.name}ReleaseAar"(MavenPublication) {
                groupId GroupId
                version Version
                artifactId "${BaseArtifactId}-${flavor.name}" // 生成如demo-extended的artifactId

                // 绑定对应变体的AAR文件
                def variant = android.libraryVariants.find { it.name == variantName }
                if (variant != null) {
                    def filename = "${archivesBaseName}-${variant.baseName}.aar"
                    artifact("$buildDir/outputs/aar/${filename}")
                }

                // 收集当前变体的专属依赖
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    def deps = variant.compileConfiguration.allDependencies + variant.runtimeConfiguration.allDependencies
                    deps.each { dep ->
                        if (dep.group != null && dep.name != null && dep.name != "unspecified" && dep.version != null && dep.version != "unspecified") {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', dep.group)
                            dependencyNode.appendNode('artifactId', dep.name)
                            dependencyNode.appendNode('version', dep.version)
                            dependencyNode.appendNode('scope', 'compile')
                        }
                    }
                }
            }
        }
    }
}

artifactory {
    contextUrl = 'http://artifactoryUrl/artifactory'
    publish {
        repository {
            repoKey = 'libs-release-local' // 替换为你的Artifactory仓库Key
            username = "${userName}"
            password = "${pass}"
        }
        defaults {
            publishArtifacts = true
            properties = ['qa.level': 'basic', 'dev.team': 'core']
            publishPom = true
        }
    }
}

使用方式

发布extendedRelease变体:

./gradlew clean :demo:assembleextendedrelease :demo:artifactoryPublish -Ppublications=extendedReleaseAar

发布miniRelease变体:

./gradlew clean :demo:assembleminirelease :demo:artifactoryPublish -Ppublications=miniReleaseAar

方案二:通过命令行参数指定要发布的变体

适合临时发布特定变体的场景,仅维护一个发布配置:

def GroupId = 'com.example.directory'
def BaseArtifactId = 'demo'
def Version = '0.0.1-IB1'
// 从命令行参数获取目标变体,默认发布extendedRelease
def targetVariantName = project.findProperty('publishVariant') ?: 'extendedRelease'

productFlavors {
    extended {}
    mini {}    
}

publishing {
    publications {
        aar(MavenPublication) {
            // 查找目标变体
            def variant = android.libraryVariants.find { it.name == targetVariantName }
            if (variant == null) {
                throw new GradleException("变体 ${targetVariantName} 不存在!")
            }

            groupId GroupId
            version Version
            artifactId "${BaseArtifactId}-${variant.flavorName}"

            // 绑定变体AAR文件
            def filename = "${archivesBaseName}-${variant.baseName}.aar"
            artifact("$buildDir/outputs/aar/${filename}")

            // 收集变体专属依赖
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                def deps = variant.compileConfiguration.allDependencies + variant.runtimeConfiguration.allDependencies
                deps.each { dep ->
                    if (dep.group != null && dep.name != null && dep.name != "unspecified" && dep.version != null && dep.version != "unspecified") {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', dep.group)
                        dependencyNode.appendNode('artifactId', dep.name)
                        dependencyNode.appendNode('version', dep.version)
                        dependencyNode.appendNode('scope', 'compile')
                    }
                }
            }
        }
    }
}

artifactory {
    contextUrl = 'http://artifactoryUrl/artifactory'
    publish {
        repository {
            repoKey = 'libs-release-local' // 替换为你的Artifactory仓库Key
            username = "${userName}"
            password = "${pass}"
        }
        defaults {
            publications('aar')
            publishArtifacts = true
            properties = ['qa.level': 'basic', 'dev.team': 'core']
            publishPom = true
        }
    }
}

使用方式

发布extendedRelease变体:

./gradlew clean :demo:assembleextendedrelease :demo:artifactoryPublish -PpublishVariant=extendedRelease

发布miniRelease变体:

./gradlew clean :demo:assembleminirelease :demo:artifactoryPublish -PpublishVariant=miniRelease

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:05:55