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

使用Hilt+Proto DataStore时Gradle找不到生成类UserPreferences求助

解决Hilt与Proto DataStore构建时的NonExistentClass错误

问题根源

你遇到的问题确实是Hilt的注解处理任务早于Protobuf代码生成任务执行导致的。Hilt在解析@Provides方法的返回类型DataStore<UserPreferences>时,Protobuf还没生成UserPreferences类,所以Gradle报NonExistentClass错误。移除@Provides后,Hilt不需要在注解处理阶段校验这个类型,后续Protobuf生成类后编译就能正常完成。

解决方案:调整Gradle任务依赖顺序

通过让Hilt的注解处理任务依赖Protobuf的代码生成任务,强制Protobuf先完成代码生成,再执行Hilt的注解处理。

针对Kapt(Hilt默认使用kapt)的配置

在你的App模块的build.gradle.kts(或build.gradle)中添加以下配置:

Kotlin DSL(build.gradle.kts)

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs> {
    dependsOn(tasks.withType<com.google.protobuf.gradle.ProtobufCompile>())
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.Kapt> {
    dependsOn(tasks.withType<com.google.protobuf.gradle.ProtobufCompile>())
}

Groovy DSL(build.gradle)

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs) {
    dependsOn tasks.withType(com.google.protobuf.gradle.ProtobufCompile)
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.Kapt) {
    dependsOn tasks.withType(com.google.protobuf.gradle.ProtobufCompile)
}

额外检查:确保Protobuf生成代码被识别

如果上述配置后仍有问题,确认Protobuf生成的Kotlin代码路径被Gradle的源码集包含。Protobuf插件默认会自动处理,但可以手动添加兜底配置:

Kotlin DSL

sourceSets {
    main {
        kotlin.srcDirs("build/generated/source/proto/main/kotlin")
    }
}

Groovy DSL

sourceSets {
    main {
        kotlin.srcDirs 'build/generated/source/proto/main/kotlin'
    }
}

验证

添加配置后,重新执行./gradlew clean build,Hilt会等待Protobuf生成UserPreferences类后再进行注解处理,错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:05:21