Okhttp 模拟服务器无法在 API 28 及更高版本的模拟器上运行

Okhttp mock server is not working on API 28 and above simulator

我的模拟服务器调度程序 从未达到 模拟器上的覆盖方法运行 API 28 及更高版本,但它在其他版本上工作正常。知道如何触发它吗?还是只是 API 版本问题?

我指的是 localhost:8080。 而okhttp版本是4.2.1.

fun search() {
    sleepSafely(3000)
    mockServer = MockWebServer()
    mockServer.dispatcher = ErrorDispatcher()
    mockServer.start(8080)
    sleepSafely(3000)
    // do the API request
}

public class ErrorDispatcher extends Dispatcher {

    @NotNull
    @Override
    public MockResponse dispatch(RecordedRequest request) {
        // never be triggered
        String path = request.getPath();
        if (path.equalsIgnoreCase("/api/v2/search/person")) {
            return new MockResponse()
                    .setResponseCode(404)
                    .setBody("{"MOCK_KEY": "MOCK_VALUE"}");
        } else if (path.equalsIgnoreCase("/api/v2/search/book")) {
            return new MockResponse()
                    .setResponseCode(404);
        } else {
            return new MockResponse().setResponseCode(404);
        }
    }
}

你说得对,OKHttp3 MockServer 不适用于 API 28 及更高版本。我正在使用 'com.squareup.okhttp3:mockwebserver:4.0.1',我需要将我的项目降级到 27 才能让它工作。

我认为这是因为 Android API 28+ 不再支持明文 HTTP 流量并且 MockWebServer 在 HTTP 上运行。

一位用户对 this issue 发表评论,建议将 android:usesCleartextTraffic="true" 添加到您的测试清单。