使用Hilt编写Android插桩测试时遇编译错误的求助
解决Hilt插桩测试构建错误:Cannot process test roots and app roots in the same compilation unit
这个错误是Hilt插件编译时的冲突问题,核心是插件同时处理了主代码和测试代码的编译单元,导致逻辑冲突。以下是具体解决步骤:
1. 补全模块级build.gradle的Hilt配置
打开你app模块(或测试所在模块)的build.gradle,确保配置完整区分主代码和测试代码的Hilt依赖:
plugins { id 'com.android.application' id 'kotlin-android' id 'dagger.hilt.android.plugin' id 'kotlin-kapt' } android { defaultConfig { testInstrumentationRunner "com.mayurg.helpers.HiltTestRunner" } } dependencies { // 主代码Hilt依赖 implementation "com.google.dagger:hilt-android:2.40.5" kapt "com.google.dagger:hilt-android-compiler:2.40.5" // 测试专用Hilt依赖 androidTestImplementation "com.google.dagger:hilt-android-testing:2.40.5" kaptAndroidTest "com.google.dagger:hilt-android-compiler:2.40.5" } kapt { correctErrorTypes = true }
2. 解决版本兼容性问题
你当前用的Gradle 4.2.2版本太老,和Hilt 2.40.5不兼容,建议升级:
- 把根build.gradle里的
com.android.tools.build:gradle改成7.0.4 - 同步后更新Gradle wrapper(gradle/wrapper/gradle-wrapper.properties里的
distributionUrl换成https\://services.gradle.org/distributions/gradle-7.0.2-all.zip)
如果暂时不想升级,也可以在模块build.gradle里添加Hilt编译参数绕过检查:
android { defaultConfig { testInstrumentationRunner "com.mayurg.helpers.HiltTestRunner" // 添加参数禁用模块安装检查 testInstrumentationRunnerArguments += [ 'dagger.hilt.disableModulesHaveInstallInCheck': 'true' ] } }
3. 必要的验证和清理
- 确认
HiltTestApplication存在,没有的话新建:
@HiltAndroidApp class HiltTestApplication : Application()
- 执行清理构建命令:
./gradlew clean ./gradlew assembleDebugAndroidTest
内容的提问来源于stack exchange,提问作者Mayur Gajra
相关产品推荐
相关产品推荐

