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

使用Gradle配置跨项目依赖时Android同步报错求助

问题根源及修复方案

1. 产物声明未关联任务或类型错误

生产者侧如果仅将目录路径添加到prepAssets配置,未把自定义任务myTask的输出绑定为配置产物,Gradle无法追踪该目录的生成来源,导致配置解析阶段找不到有效产物。

正确的生产者配置示例:

// 生产者模块build.gradle
configurations {
    prepAssets {
        canBeResolved = false
        canBeConsumed = true
        attributes {
            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, "android-assets"))
            attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.DOCUMENTATION))
        }
    }
}

tasks.register("myTask") {
    // 明确声明任务输出目录
    def outputDir = layout.buildDirectory.dir("generated/assets/myTask")
    outputs.dir(outputDir)
    
    doLast {
        // 生成assets的具体逻辑
        outputDir.get().asFile.mkdirs()
        // ...
    }
}

// 将myTask的输出关联到prepAssets配置
artifacts.add("prepAssets", tasks.myTask)

2. 消费者侧过早求值产物路径

若在配置阶段直接将assetsConsumer的产物目录添加到Android assets源,会导致Lint相关任务(如generateDebugLintModel)初始化时,试图访问尚未被任务赋值的outputDirectory属性,触发错误。

正确的消费者配置需使用延迟求值:

// 消费者app模块build.gradle
configurations {
    assetsConsumer {
        canBeResolved = true
        canBeConsumed = false
        attributes {
            attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, "android-assets"))
            attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.DOCUMENTATION))
        }
        dependencies {
            project(path: ':生产者模块名', configuration: 'prepAssets')
        }
    }
}

// 用provider延迟获取产物目录,避免配置阶段提前求值
android.sourceSets.main.assets.srcDirs += providers.provider {
    configurations.assetsConsumer.singleFile
}

3. 配置属性不匹配

生产者与消费者的配置需通过属性匹配完成依赖解析,若两边的属性(如Usage、Category)不一致,Gradle无法找到匹配产物,同样会触发依赖解析错误。需确保prepAssets和assetsConsumer的属性完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:01:30