Android Gradle单元测试任务失败,提示找不到主类及指定文件/目录
我之前在做Android项目单元测试时也碰到过几乎一模一样的问题,大概率是KSP针对单元测试的代码生成环节出了问题——要么是生成目录没正常创建,要么是任务依赖没配置对。给你几个亲测有效的排查和解决方向:
先清理缓存再重新构建
有时候Gradle的缓存会搞出各种奇怪的问题,先彻底清理掉旧的构建产物试试。在项目根目录打开终端,执行:gradlew clean等清理完成后,再重新执行测试任务:
gradlew debugUnitTest如果是用Android Studio开发,也可以直接点顶部菜单栏的
Build -> Clean Project,接着点Build -> Rebuild Project,之后再重试测试。检查KSP插件和依赖的配置
要确保你的模块build.gradle(或build.gradle.kts)里正确配置了KSP,尤其是针对单元测试的代码生成部分:
比如Groovy版的build.gradle:plugins { id 'com.android.application' id 'kotlin-android' id 'com.google.devtools.ksp' // 必须要应用这个插件 } dependencies { // 确保添加了KSP的API依赖(如果需要的话) testImplementation "com.google.devtools.ksp:symbol-processing-api:1.9.20-1.0.14" // 这里替换成你实际用的注解处理器依赖,比如Room的话就是kspTestImplementation "androidx.room:room-compiler:2.5.0" kspTestImplementation "你的注解处理器依赖坐标" }另外要注意KSP版本和你的Kotlin版本必须兼容,版本不匹配很容易导致代码生成失败。
手动指定测试任务的依赖关系
有时候Gradle的任务依赖链出了问题,测试任务在KSP生成代码之前就跑起来了,自然找不到生成的目录。可以手动让测试任务依赖KSP的生成任务:
Groovy版添加:tasks.named('debugUnitTest') { dependsOn 'kspDebugUnitTestKotlin' }KTS版添加:
tasks.named<Test>("debugUnitTest") { dependsOn("kspDebugUnitTestKotlin") }这样就能保证跑测试前,先执行KSP的代码生成任务,创建好需要的classes和resources目录。
升级Gradle和AGP版本
旧版本的Gradle或Android Gradle Plugin(AGP)可能和KSP存在兼容性问题,建议升级到稳定的最新版本。比如AGP用7.4以上的版本,对应的Gradle版本用7.5以上(可以参考官方的AGP与Gradle版本对应表)。查看KSP的详细日志定位问题
如果上面的方法都没解决,可以执行下面的命令查看KSP生成测试代码时的详细日志:gradlew kspDebugUnitTestKotlin --info日志里会显示KSP在执行过程中有没有报错,比如注解处理器的异常,这样就能精准定位到具体问题了。
内容来源于stack exchange

