Android 9中Espresso测试因CLEARTEXT请求失败的解决方法咨询
解决Espresso测试应用在Android 9下的Cleartext网络请求问题
你遇到的问题核心在于:Espresso测试会启动一个独立的测试APK,而非直接在主应用进程中运行,所以主应用清单里的networkSecurityConfig完全不会作用于测试应用的网络请求。下面给你几个可靠的解决方案:
方法一:为测试模块添加自定义清单文件(推荐)
这是最直接且兼容性最好的方式,我们可以给测试模块(androidTest目录)单独配置网络安全规则:
- 在
androidTest目录下创建AndroidManifest.xml文件,路径为src/androidTest/AndroidManifest.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.app.test"> <!-- 替换成你的测试包名,通常是主包名加.test --> <application android:networkSecurityConfig="@xml/network_security_config_test" /> </manifest>
- 在
androidTest/res/xml目录下创建network_security_config_test.xml,配置允许明文流量:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 允许所有请求使用Cleartext --> <base-config cleartextTrafficPermitted="true" /> <!-- 如果只想针对特定域名开放,可以用domain-config --> <!-- <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">your-test-backend.com</domain> </domain-config> --> </network-security-config>
Gradle会自动合并这个测试清单到生成的测试APK中,这样测试应用的网络请求就会允许明文传输了。
方法二:通过代码动态配置(适合快速调试)
如果不想修改清单文件,也可以在测试代码中通过反射动态修改应用的网络安全配置,在测试类的@Before方法中添加:
import android.app.Application import android.content.Context import android.net.NetworkSecurityConfig import androidx.test.platform.app.InstrumentationRegistry import org.junit.Before class YourEspressoTest { @Before fun setupNetworkConfig() { val context: Context = InstrumentationRegistry.getInstrumentation().targetContext val app = context.applicationContext as Application // 构建允许Cleartext的网络安全配置 val config = NetworkSecurityConfig.Builder() .setCleartextTrafficPermitted(true) .build() // 通过反射修改Application的mNetworkSecurityConfig字段 val field = Application::class.java.getDeclaredField("mNetworkSecurityConfig") field.isAccessible = true field.set(app, config) } // 你的测试用例... }
⚠️ 注意:反射依赖于系统内部字段,不同Android版本可能有变动,所以长期来看还是推荐方法一。
额外说明
再强调一次:Espresso测试的网络请求是在测试APK进程中发起的,这个APK的清单是独立于主应用的,所以主应用的任何清单修改都不会影响它。通过androidTest目录下的自定义清单,我们可以直接控制测试APK的配置,这是官方推荐的测试模块配置方式。
内容的提问来源于stack exchange,提问作者STARGATEBG
相关产品推荐
相关产品推荐

