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

升级Gradle 8.0后Android库发布任务依赖未声明错误求助

解决Gradle 8.0发布Android库的任务依赖错误

错误原因

Gradle 8.0强化了任务依赖校验,当发布任务直接调用其他任务的输出文件但未显式/隐式声明依赖关系时,会触发执行顺序异常的报错。

修复步骤

1. 修正AAR文件的任务依赖

不要硬编码AAR的文件路径,改为直接引用bundleReleaseAar任务的输出产物,让Gradle自动维护任务执行顺序:

// 替换原publishing区块里的artifact("$buildDir/outputs/aar/libraryname-release.aar")
artifact(tasks.named('bundleReleaseAar'))

2. 修复androidSourcesJar的依赖声明

在MavenPublication中直接传入androidSourcesJar任务对象,而非文件路径,Gradle会自动识别依赖关系:

// 替换原artifact(sourceJar)(若无需JNI库源码可直接删除sourceJar任务)
artifact(tasks.named('androidSourcesJar'))

3. 清理冗余任务(可选)

原配置中sourceJar和androidSourcesJar功能重叠,建议合并为一个任务,同时包含Java源码和JNI库源码:

// 删除原有的sourceJar和androidSourcesJar任务,替换为合并版本
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
    from android.sourceSets.main.jniLibs.srcDirs
}

完整修改后的关键代码片段

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

// 合并后的源码打包任务
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
    from android.sourceSets.main.jniLibs.srcDirs
}

version = '8.0.0'
android {
    ...
}

dependencies {
    ...
}

android.libraryVariants.all {
    def aptOutputDir = new File(buildDir, "generated/source/apt/${it.unitTestVariant.dirName}")
    it.unitTestVariant.addJavaSourceFoldersToModel(aptOutputDir)
}

publishing {
    publications {
        maven(MavenPublication) {
            version = version
            artifactId = "your_artifact_id"
            groupId = "com.yourgroup.id"
            // 直接引用任务对象,自动建立依赖
            artifact(tasks.named('androidSourcesJar'))
            artifact(tasks.named('bundleReleaseAar'))
        }
    }
    repositories {
        maven {
            def releasesUrl = "releaseurl_ifavailable"
            def snapshotsUrl = "snapshoturl_ifavailable"
            url = version.endsWith('SNAPSHOT') ? snapshotsUrl : releasesUrl
            credentials {
                username = your_username
                password = your_password
            }
        }
    }
}

artifacts {
    archives androidSourcesJar
}

额外说明

  • 使用tasks.named()引用任务,Gradle会自动确保androidSourcesJar和bundleReleaseAar在发布任务执行前完成。
  • 若需支持多变体发布(如debug/release),可遍历libraryVariants动态生成对应Publication,而非固定使用release变体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:48:10