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

Gradle中AndroidSourceSet冲突导致Proto DataStore无法生成文件

Android Proto DataStore 生成文件失败,抛出AndroidSourceSet冲突异常

配置Proto DataStore时,无法从.proto文件生成任何代码,且抛出如下异常:

A problem occurred configuring project ':core:datastoreproto'.> org.gradle.api.InvalidUserDataException: Cannot add an AndroidSourceSet with name 'debug' as an AndroidSourceSet with that name already exists.

配置详情

版本信息

dataStore = "1.1.1"
protobuf = "4.26.1"
protobufPlugin = "0.9.4"

:core:datastoreproto模块的build.gradle.kts配置

plugins {
    alias(libs.plugins.medicineai.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.protobuf)
}

android {
    namespace = "com.medicineai.core.datastoreproto"
}

// Setup protobuf configuration, generating lite Java and Kotlin classes
protobuf {
    protoc {
        artifact = libs.protobuf.protoc.get().toString()
    }
    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                register("java") {
                    option("lite")
                }
                register("kotlin") {
                    option("lite")
                }
            }
        }
    }
}

androidComponents.beforeVariants {
    android.sourceSets.register(it.name) {
        val buildDir = layout.buildDirectory.get().asFile
        java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java"))
        kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin"))
    }
}

dependencies {
    api(libs.protobuf.kotlin.lite)
}

auth_info.proto文件内容

syntax = "proto3";

option java_package = "com.medicineai.core.datastoreproto";

message AuthInfo {
  string accessToken = 1;
  string refreshToken = 2;
  string userId = 3;
}

问题

不清楚导致AndroidSourceSet冲突的原因,求解决方案。


解决方案

问题根源在androidComponents.beforeVariants代码块:Android插件默认已经为每个变体(如debug、release)创建了对应的SourceSet,你重复注册同名SourceSet就会触发冲突异常。此外,protobuf插件已经自动将生成代码的目录添加到SourceSet中,无需手动配置。

修改步骤:

  1. 删除整个androidComponents.beforeVariants代码块
  2. 补充DataStore的protobuf依赖(原配置遗漏)

修改后的build.gradle.kts核心配置:

plugins {
    alias(libs.plugins.medicineai.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.protobuf)
}

android {
    namespace = "com.medicineai.core.datastoreproto"
}

protobuf {
    protoc {
        artifact = libs.protobuf.protoc.get().toString()
    }
    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                register("java") {
                    option("lite")
                }
                register("kotlin") {
                    option("lite")
                }
            }
        }
    }
}

dependencies {
    api(libs.protobuf.kotlin.lite)
    // 添加DataStore Proto依赖
    implementation(libs.androidx.datastore.protobuf)
}

验证方式:

  • 执行./gradlew :core:datastoreproto:generateDebugProto任务,检查build/generated/source/proto/debug目录是否生成Java和Kotlin代码
  • 同步Gradle后,确认项目中可正常引用AuthInfo类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:25:13