java.net.UnknownServiceException:网络安全策略不允许与 t.main.wedeep.com.cn 的 CLEARTEXT 通信

Cyr*_*rus 4 android download-manager okhttp android-9.0-pie

当我使用 mockhttpserver 测试 http 请求时出现上述错误,以下代码是我创建服务的方式。

   fun <T> getService(clazz: Class<T>): T {
        val client = OkHttpClient.Builder().addInterceptor(HeaderInterceptor()).addInterceptor(HttpLoggingInterceptor().apply { level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE })
                .build()
        return Retrofit.Builder()
                .baseUrl(mockWebServer.url(""))
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(GSON))
                .build()
                .create(clazz)
    }
Run Code Online (Sandbox Code Playgroud)

这是我的测试代码。

@UninstallModules(HomePageDataModule::class)
@HiltAndroidTest
class TestHomePageViewModel {


    private lateinit var viewModel: HomePageViewModel

    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    @Inject
    lateinit var cpd: CompositionDao

    @Inject
    lateinit var csd: CompositionsDao

    @Inject
    lateinit var hpds: HomePageDataSource

    @Inject
    lateinit var ss :HomePageService

    @Before
    fun init() {
        hiltRule.inject()
        viewModel = HomePageViewModel(HomeCompositionsRepository(cpd, csd, hpds, Util.GSON))

    }





    @Test
    fun testObserveHomeData() {

        val data = Util.getFileString("mainpage.json")
        val rr  = GSON.fromJson(data,Array<HomePreviewView>::class.java)
        println(rr)
        enqueueResponse("mainpage.json")
        runBlocking {
            val result = ss.getHomeData()
            Assert.assertNotEquals(rr.size,result.body()!!.size)
        }
}
Run Code Online (Sandbox Code Playgroud)

除了运行我的单元测试代码之外,我的应用程序一切正常。 有一个类似的问题,但我的问题与那个问题相比有点不同。我尝试过类似问题的很多方法,但都不起作用。

PS:如果测试代码在 Junit4Test 上运行而不是在 AndroidJunit4Test 上运行,则它可以正常工作。但现在我需要执行集成测试。所以这部分代码需要在AndroidJunit4Test上执行

Qui*_*ner 11

解决方案 1)

将以下属性添加到<applicationAndroidManifest.xml 中的标记:

android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)

解决方案2)

添加android:networkSecurityConfig="@xml/network_security_config"<application标签中app/src/main/AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:networkSecurityConfig="@xml/network_security_config"
        android:theme="@style/AppTheme">
Run Code Online (Sandbox Code Playgroud)

具有相应的network_security_config.xmlin app/src/main/res/xml/

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
Run Code Online (Sandbox Code Playgroud)