Android Studio 2022.2.1网络检查器无数据及WebView流量排查问题
问题解决:Android Studio Network Inspector无法捕获WebView流量
环境信息
Android Studio Flamingo | 2022.2.1 Build #AI-222.4459.24.2221.9862592, built on March 31, 2023 Runtime version: 17.0.6+0-b2043.56-9586694 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 10 10.0
问题1:如何确认WebView.loadUrl()是否使用HttpsURLConnection或OkHttp?
默认情况下,Android系统WebView(基于Chromium内核)不依赖HttpsURLConnection或OkHttp,它拥有独立的内置网络栈,和应用层的网络库完全隔离。验证方式:
- 启用WebView调试日志:在应用初始化时添加
WebView.setWebContentsDebuggingEnabled(true);,然后在Logcat中过滤chromium或Network关键词,查看WebView内部网络请求的日志细节,可直接确认其使用的是自身网络栈。 - 检查自定义实现:如果没有手动通过
WebViewClient的shouldInterceptRequest方法替换请求逻辑,WebView必然使用默认内核网络栈,不会走HttpsURLConnection或OkHttp。
问题2:如何让WebView.loadUrl()的流量在Network Inspector的Connection View中显示?
由于Network Inspector仅支持HttpsURLConnection和OkHttp,要捕获WebView流量,需让WebView请求走这两个支持的网络库,或使用替代工具:
方案1:拦截WebView请求,改用OkHttp/HttpsURLConnection发起
通过自定义WebViewClient拦截请求,将请求转发到OkHttp(或HttpsURLConnection),再把响应返回给WebView。示例代码(OkHttp):
webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { OkHttpClient client = new OkHttpClient.Builder().build(); Request okHttpRequest = new Request.Builder() .url(request.getUrl()) .method(request.getMethod(), request.getMethod().equals("POST") ? RequestBody.create(null, new byte[0]) : null) .build(); try (Response response = client.newCall(okHttpRequest).execute()) { String contentType = response.header("Content-Type", "text/html"); String encoding = response.header("Content-Encoding", "utf-8"); return new WebResourceResponse( contentType, encoding, response.body().byteStream() ); } catch (IOException e) { e.printStackTrace(); return super.shouldInterceptRequest(view, request); } } });
此方法需处理POST请求、Cookie、缓存等场景,实现复杂度较高,但能让WebView流量被Network Inspector捕获。
方案2:使用Network Profiler替代Network Inspector
Android Studio的Network Profiler可以捕获应用内所有网络流量(包括WebView默认栈的请求),操作步骤:
- 打开Profiler(
View > Tool Windows > Profiler) - 连接目标设备与应用
- 切换到Network标签,即可查看所有网络请求,包括WebView发起的流量。
方案3:使用WebView远程调试工具
通过Chrome浏览器的远程调试功能查看WebView流量:
- 在应用中启用WebView调试:
WebView.setWebContentsDebuggingEnabled(true); - 打开Chrome浏览器,输入
chrome://inspect - 连接设备后,找到目标WebView实例,点击
inspect,在弹出的DevTools中切换到Network标签,即可查看WebView的所有请求细节。
内容的提问来源于stack exchange,提问作者Introspective
相关产品推荐
相关产品推荐

