如何在Android库项目的单元测试中使用JDK包?
解决Android库本地单元测试无法识别JDK完整类库的问题
Android Gradle插件默认会为本地单元测试的编译阶段绑定Android SDK对应的JDK类子集,而非直接使用主机环境的完整JDK。哪怕单元测试运行在主机JVM上,编译环节仍会受到Android API级别对JDK类的限制,像Java 11引入的java.net.http.HttpClient这类不在Android兼容子集里的类就会无法解析。
修复步骤(修改模块的build.gradle)
- 指定项目及单元测试使用的Java版本(需≥11,因为
java.net.http是Java 11新增API):
android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } testOptions { unitTests { // 禁用Android资源依赖(若单元测试不需要),减少Android环境干扰 includeAndroidResources = false // 显式添加JDK模块,确保编译时能识别java.net.http包 all { jvmArgs '--add-modules', 'java.net.http' } } } }
- 绑定对应版本的JDK工具链,确保单元测试使用主机上的完整JDK:
tasks.withType(Test) { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(11) } }
- 若仍有问题,排除单元测试依赖中可能限制JDK类的Android组件:
configurations.testImplementation { exclude group: 'com.android.support', module: 'support-annotations' }
修改完成后同步Gradle,本地单元测试的编译阶段会使用指定的完整JDK版本,即可正常导入并使用java.net.http.HttpClient这类JDK原生类。
内容的提问来源于stack exchange,提问作者JBM
相关产品推荐
相关产品推荐

