升级到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
相关产品推荐
相关产品推荐

