升级Gradle4.1与AGP3.0.1后assembleAndroidTest任务依赖解析失败求助
我之前升级AGP和Gradle版本时也碰到过几乎一模一样的问题,结合你给出的Kotlin 1.2.10、kotlin-kapt这些环境信息,大概率是测试编译阶段的依赖配置或者插件逻辑出了问题,给你几个逐步排查的方向:
1. 确保AndroidTest变体的Kotlin依赖配置完整
AGP 3.0+对依赖配置做了明确的拆分(比如implementation替代旧的compile),但很多人容易忽略测试变体需要单独引入Kotlin标准库。如果你的主代码依赖里只加了implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10",一定要在androidTestImplementation里也加上对应的依赖:
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10" // 如果用到了kotlin-reflect、kotlin-coroutines等扩展库,也要同步添加androidTestImplementation依赖
Kotlin插件在AGP 3.0+下不会自动把主变体的Kotlin依赖传递到测试变体,必须显式声明。
2. 检查kotlin-kapt在测试变体的配置
因为你用到了kotlin-kapt插件,AGP 3.0+要求测试阶段的注解处理器单独通过kaptAndroidTest配置。如果你的测试代码里用到了主代码中的注解(或者测试专属的注解),一定要对应添加处理器依赖:
// 替换成你实际使用的注解处理器 kaptAndroidTest "com.yourcompany:your-annotation-processor:x.y.z"
如果遗漏这个配置,测试编译时会因为找不到注解生成的代码,连带出现类似依赖未解析的错误。
3. 排查测试变体的ProGuard/R8配置
你提到怀疑ProGuard但规则无效,很可能是因为测试变体的ProGuard配置和主变体是独立的:
- 你是不是只在主变体的
proguard-rules.pro里加了保留规则,而测试变体的配置文件(比如proguard-rules-test.pro)没同步? - 可以先临时关闭测试变体的代码压缩来验证问题根源:
如果关闭后问题消失,那就是测试的ProGuard规则需要补充针对Kotlin标准库的保留:android { buildTypes { debug { // 临时禁用测试代码的混淆压缩 testMinifyEnabled false // 如果之前配置了testProguardFiles,也可以暂时注释掉 // testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-test.pro' } } }// 保留Kotlin标准库的核心类和顶层函数 -keep class kotlin.** { *; } -keepnames class kotlin.** { *; } -keepclassmembers class kotlin.** { *; } // 或者更精准地保留你用到的顶层函数所在的类,比如kotlin.collections.CollectionsKt等
4. 清理Gradle缓存并重建项目
AGP升级后缓存异常是高频问题,试试执行以下命令彻底清理后重新编译:
./gradlew clean assembleAndroidTest --no-build-cache
旧缓存可能导致依赖解析逻辑混乱,尤其是混合了新旧Gradle版本的缓存文件。
如果以上步骤都没用,可以再检查测试代码中是否有引用主代码中被混淆的类,或者测试代码的包结构是否和主代码匹配导致的类找不到问题。
内容的提问来源于stack exchange,提问作者Javad

