使用网络检查器检查网络流量

网络检查器在时间轴上实时显示网络活动,显示发送和接收的数据。网络检查器可让您检查应用传输数据的方式和时间,并相应地优化底层代码。

要打开网络检查器,请按以下步骤操作:

  1. 在 Android Studio 导航栏中,选择 View > Tool Windows > App Inspection。在应用检查窗口自动连接到应用进程后,从标签页中选择 Network Inspector
    • 如果应用检查窗口未自动连接到应用进程,您可能需要手动选择一个应用进程。
  2. App Inspection 窗口中选择您要检查的设备和应用进程。

网络检查器概览

在网络检查器窗口的顶部,您可以看到事件时间轴。点击并拖动以选择时间轴的一部分并检查流量。

The Network Inspector window
图 1. 网络检查器窗口。

在详细信息窗格中,时间图可以帮助您识别可能出现性能问题的位置。黄色部分的起始点对应于请求的第一个字节的发送。蓝色部分的起始点对应于响应的第一个字节的接收。蓝色部分的结束点对应于响应的最后一个字节的接收。

在时间轴下方的窗格中,选择以下任一标签页,以获取有关时间轴选定部分的网络活动的更多详细信息:

  • Connection View:列出在时间轴选定部分内跨应用所有 CPU 线程发送或接收的文件。对于每个请求,您可以检查大小、类型、状态和传输持续时间。要对此列表进行排序,请点击任何列标题。您还可以查看时间轴选定部分的详细分解,显示每个文件的发送或接收时间。
  • Thread View:显示应用每个 CPU 线程上的网络活动。如图 2 所示,此视图可让您检查哪个线程负责每个网络请求。

    Inspect network requests by app thread in the thread view
    图 2.Thread View 中按应用线程检查网络请求。
  • Rules View:规则有助于测试应用在遇到不同状态码、标头和正文的响应时的行为。创建新规则时,为您的新规则命名,并在Origin子部分下包含您要拦截的响应源信息。在Response子部分中,您可以指定修改响应的位置和方式。例如,您可以设置规则以在具有特定状态码的响应上执行,并修改该状态码。在Header rulesBody rules子部分中,创建添加或修改响应标头或正文的子规则。规则按照它们列出的顺序应用。通过勾选规则旁边的Active框来选择启用或禁用哪个规则。

    Network Inspector Rules and Rule Details panes
    图 3. 网络检查器 RulesRule Details 窗格。

Connection ViewThread View 中,点击请求名称可检查有关发送或接收数据的详细信息。点击标签页可查看响应标头和正文、请求标头和正文或调用堆栈。

ResponseRequest 标签页上,点击 View Parsed 链接可显示格式化文本。点击 View Source 链接可显示原始文本。

Toggle between raw text and formatted text
图 4. 通过点击相应链接,在原始文本和格式化文本之间切换。

除了显示 HttpsURLConnection 的网络请求外,网络检查器还支持 OkHttp。一些第三方网络库,例如 Retrofit,内部使用 OkHttp,因此网络检查器允许您检查它们的网络活动。Now In Android 示例应用使用 OkHttp 进行网络操作,是查看其实际应用的良好场所。

如果您使用的是 HttpsURLConnection API,您只会看到在代码中使用 setRequestProperty 方法包含的 Request 标签页中的标头,如以下示例所示:

Kotlin

val url = URL(MY_URL_EN)
val urlConnection: HttpsURLConnection = url.openConnection() as HttpsURLConnection
...
// Sets acceptable encodings in the request header.
urlConnection.setRequestProperty("Accept-Encoding", "identity")

Java

URL url = new URL(MY_URL_EN);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
//...
// Sets acceptable encodings in the request header.
urlConnection.setRequestProperty("Accept-Encoding", "identity");

排查网络连接问题

如果网络检查器检测到流量值但无法识别任何受支持的网络请求,您将收到以下错误消息:

**Network Inspector Data Unavailable:** There is no information for the
  network traffic you've selected.

目前,网络检查器仅支持 HttpsURLConnectionOkHttp 库进行网络连接。如果您的应用使用其他网络连接库,您可能无法在网络检查器中查看您的网络活动。如果您收到了此错误消息,但您的应用确实使用了 HttpsURLConnectionOkHttp,请报告 Bug搜索问题跟踪器,以便在与您的问题相关的现有报告中包含您的反馈。您还可以使用这些资源请求对其他库的支持。