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

升级到Compose Compiler 2.0.0时Android项目出现KSP错误

问题分析与解决方案

核心问题

报错中的error.NonExistentClass本质是KSP无法找到DataStore依赖的Proto生成类,根源来自两处关键配置不匹配:

1. Kotlin序列化插件版本与主版本不一致

项目根build.gradle.kts中,Kotlin主版本为2.0.0,但序列化插件版本停留在1.8.10,版本严重不兼容,导致Proto生成的序列化类无法被KSP正确识别,被标记为不存在的类。

2. Protobuf插件版本过低,适配AGP 8.5存在缺陷

当前使用的com.google.protobuf插件版本0.9.4无法很好适配AGP 8.5,旧版本生成的类路径无法被KSP正常扫描。


修复步骤

步骤1:统一Kotlin相关插件版本

修改根build.gradle.kts中的序列化插件版本,与Kotlin主版本保持一致:

plugins {
    id("com.android.application") version "8.5.0" apply false
    id("org.jetbrains.kotlin.android") version "2.0.0" apply false
    id("com.google.dagger.hilt.android") version "2.51" apply false
    id("com.google.devtools.ksp") version "2.0.0-1.0.22" apply false
    id("org.jetbrains.kotlin.plugin.compose") version "2.0.0" apply false
    id("org.jetbrains.kotlin.plugin.serialization") version "2.0.0" apply false // 修正版本
}

步骤2:升级Protobuf插件版本

将App模块build.gradle.kts中的Protobuf插件升级到适配AGP 8.5的稳定版本(推荐0.10.4):

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose")
    id("com.google.protobuf") version "0.10.4" // 升级插件版本
    id("com.google.dagger.hilt.android")
    id("com.google.devtools.ksp")
    id("kotlinx-serialization")
}

步骤3:调整Proto生成配置适配Kotlin DataStore

当前配置生成的是Java Lite类,与DataStore的Kotlin API不兼容,修改为生成Kotlin序列化类:

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.24.1"
    }

    generateProtoTasks {
        all().configureEach {
            builtins {
                // 移除Java Lite配置,添加Kotlin序列化生成规则
                id("kotlin") {
                    option("serializable")
                }
            }
        }
    }
}

同时确保添加DataStore Proto相关依赖(若未添加):

dependencies {
    implementation("androidx.datastore:datastore-proto:1.1.1")
    implementation("com.google.protobuf:protobuf-kotlin-lite:3.24.1")
}

步骤4:清理缓存并重新构建

执行以下命令清理Gradle缓存,避免旧生成文件干扰:

./gradlew clean build --refresh-dependencies

额外检查点

  • 确认Proto文件放置在src/main/proto目录下,AGP默认扫描该路径
  • 检查UserPreferencesRepositoryImpl中DataStore的泛型类型是否正确指向生成的Proto类(例如DataStore<UserPreferences>)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:36:07