Network Inspector — 它是什么、工作原理以及网络请求监控

作者: IT Sectr 发布日期: 2026-05-07 阅读时间: 8 分钟

Android Studio 中的 Network Inspector 是一个内置的性能分析工具,用于实时监控和分析移动应用程序的网络流量。根据 Android Developers (2025) 官方文档,该工具可以跟踪请求的执行时间、传输数据量以及每次调用的 HTTP 状态。该工具 不需要修改应用程序代码,并且可以在 API Level 14 及以上的任何项目中直接使用。

要点

  • Network Inspector — 是 Android Profiler 的一个组件,用于监控网络请求,并可查看请求头和响应体
  • 流量拦截 自动适用于应用程序发出的所有 HTTP 调用,包括 OkHttp、Retrofit、Ktor 和 WebView
  • 时间线 显示请求序列,包含每次调用的持续时间、大小和状态
  • 每个请求的详细视图 包括请求头、请求和响应体、Cookie 以及按阶段划分的执行时间
  • 以 HAR 格式导出数据 可以将网络交互传递给同事或保存以供后续分析

什么是 Network Inspector?

Network Inspector 是一个内置于 Android Studio 的网络活动性能分析工具。它允许开发人员实时查看应用程序发送的所有 HTTP 和 HTTPS 请求,包括请求头、请求和响应体、状态码以及执行持续时间。从 Android Studio 3.0 开始可通过 Android Profiler 面板使用。

目的和应用范围

Network Inspector 的主要任务是 调试移动应用程序与服务器的网络交互。该工具用于检查传输数据的正确性、分析响应时间、搜索 API 错误以及发现非最佳的网络模式——例如在加载一个屏幕时的多个请求。Network Inspector 可在任何 API Level 14 的设备上运行。

兼容性和库

该工具支持所有主要的 Android HTTP 客户端:OkHttp(从 2.x 版本开始)、Retrofit、Ktor(KMM)、UrlConnection、Apache HttpClient(已弃用)和 WebView。对于 OkHttp 和 Retrofit,需要 OkHttp Profiler 库——在使用 Android Studio 4.1+ 时会自动添加。对于 Ktor,需要单独配置拦截器。

Network Inspector 的工作原理

Network Inspector 使用与 Android Profiler 一起注入的 Profiler Agent 机制在 系统级别拦截网络调用。为了正常工作,需要应用程序的调试版本。该工具不会修改应用程序代码,也不需要为基础功能添加依赖项。

流量拦截机制

在启动性能分析时,Network Inspector 连接到应用程序的 调试进程 并监听通过 OkHttp Client、UrlConnection 或其他受支持库的所有 HTTP 调用。每个请求都带有时间戳记录,从而可以构建网络活动的时间线。对于 HTTPS,使用系统中间层,它在传输过程中保持加密,但允许在 Studio 内查看解码后的内容。

数据收集架构

数据收集通过 Android Studio 的 Profiler Service 进行,该服务在主机的单独进程中运行。设备上运行着一个轻量级的代理程序,通过 ADB 通道传输请求的元数据。这最大限度地减少了对应用程序性能的影响——根据 Google 的数据,开销小于 3%。请求数据本身(主体、头部)仅在主动查看详细信息时传输。

kotlin
// 连接 OkHttp 以与 Network Inspector 集成
val client = OkHttpClient.Builder()
    .addInterceptor(HttpLoggingInterceptor().apply {
        level = HttpLoggingInterceptor.Level.BASIC
    })
    .build()

// Network Inspector 自动通过 client 拦截所有调用
client.newCall(Request.Builder()
    .url("https://api.example.com/data")
    .build()).execute()

Network Inspector 的主要功能

Network Inspector 提供了一套工具来全面分析网络流量。每个功能都针对特定的调试任务——从检查请求头到分析 API 性能。

请求时间线

Network Inspector 的主屏幕以时间线的形式显示所有请求的年表。每个请求用彩色条表示:绿色——成功响应(2xx),蓝色——重定向(3xx),黄色——客户端错误(4xx),红色——服务器错误(5xx)。条的长度对应于从连接到接收完整响应的请求执行时间。这样可以立即发现慢速或出错的请求。

参数描述示例值
URL请求的完整地址https://api.example.com/v2/users
Method请求的 HTTP 方法POST
Status响应的 HTTP 状态码200 OK
Size请求 + 响应的大小(字节)12.4 KB
Time总执行时间342 ms

请求的详细视图

选择特定请求后,会打开一个详细信息面板:Headers(请求头)(请求和响应的所有头部)、Request Body(请求体)(文本或二进制格式的请求主体)、Response Body(响应体)(可格式化 JSON 的响应主体)、Cookies(发送和接收的)、Timing(计时)(按阶段划分时间:DNS、Connection、TLS Handshake、Request、Response)。

过滤和搜索

Network Inspector 支持按 URL、HTTP 方法、状态码和内容类型过滤请求。可以排除对特定域名的请求,只关注所需的 API。搜索功能适用于请求的所有字段,包括主体和头部,这在调试应用程序的特定功能时非常方便。组合筛选器可以创建一组规则,在每次启动性能分析时自动应用。

请求的分组和比较

时间线支持按 URL 模式对请求进行分组。例如,所有 /api/v2/users/* 形式的请求可以折叠为一组。当应用程序在短时间内发出数百个请求时,这简化了分析。相邻请求比较功能有助于检测重复调用时服务器响应的变化。

使用 Network Inspector 调试网络请求

Network Inspector 的实际应用涵盖典型的调试场景:检查数据格式、检测慢速端点、发现未关闭连接导致的内存泄漏以及分析缓存。

检查 JSON 响应结构

一个常见的任务是确保服务器以预期格式返回数据。Network Inspector 显示带有 JSON 格式化的响应主体,包括语法高亮。如果响应无法在客户端解析,检查器中会立即看到原因:缺少字段、错误的数据类型(字符串而不是数字)或过深的嵌套。如果服务器返回错误,检查器显示包含代码和消息的错误结构。对于二进制格式(Protocol Buffers、图像),显示大小和内容类型。

执行时间分析

Timing 选项卡将请求的执行分为各个阶段:DNS 解析、TCP 连接、TLS 握手、请求发送、响应接收。如果总时间超过 1-2 秒,可以根据阶段划分确定原因。例如,长时间的 DNS 表明解析器有问题,长时间的 TLS 握手表明服务器上的协议版本过时,长时间的响应表明服务器代码缓慢或请求包含多余数据效率低下。Timing 分析有助于在开始优化服务器端之前识别瓶颈。

查找重复请求

Network Inspector 有助于发现冗余请求——例如,每次屏幕旋转时 Activity 都会重新加载数据。在时间线上,一连串相同的请求清楚地表明了问题。解决方法是使用缓存、使用保持状态的 ViewModel 或使用 SingleLiveEvent 进行一次性加载。

kotlin
// 使用 OkHttp 缓存请求以消除重复
val cache = Cache(
    File(context.cacheDir, "http_cache"),
    cacheSize = 10L * 1024 * 1024 // 10 MB
)

val cachedClient = OkHttpClient.Builder()
    .cache(cache)
    .addNetworkInterceptor(CacheInterceptor())
    .build()

Network Inspector 的限制和替代方案

尽管功能广泛,Network Inspector 有一些限制需要考虑。对于某些场景——例如拦截带有自签名证书的 HTTPS 或分析第三方库的流量——可能需要替代工具。

平台和库限制

Network Inspector 仅适用于 Android 应用程序,不支持 iOS。对于 Kotlin Multiplatform (KMM),某些请求如果在原生部分执行,可能不会显示。一些库——例如 gRPC、WebSocket(非 HTTP)、通过 Apollo 的 GraphQL(直到 3.x 版本)——在没有配置额外拦截器的情况下可能部分或完全无法被拦截。

替代工具

为了更深入地分析网络流量,存在第三方解决方案:Charles Proxy(具有 HTTPS 拦截功能的完整代理服务器)、Proxyman(macOS 的对应产品)、Wireshark(数据包级别分析)、Facebook 的 Stetho(与 Chrome DevTools 集成)、Chucker(用于在应用程序内部检查请求的库)。每个工具都有其领域:Charles 和 Proxyman 在开发早期阶段调试与服务器的交互时不可或缺,而 Chucker 则用于在测试版本中收集信息。

工具类型平台HTTPSHAR
Network Inspector内置于 Android StudioAndroid
Charles Proxy代理服务器跨平台
Proxyman代理服务器macOS、iOS
Chucker应用内检查器Android
Wireshark数据包分析器跨平台

常见问题

为什么 Network Inspector 不显示请求?

确保应用程序是在 Debug 配置 下编译的,并且在连接 Android Profiler 的情况下运行。如果使用 OkHttp 4.x,可能需要将库更新到最新版本。对于 Ktor,请求仅在使用支持拦截的 Engine 的 Ktor 客户端时显示。

可以查看 HTTPS 流量吗?

是的,Network Inspector 支持 HTTPS 流量,无需额外配置。与 Charles Proxy 不同,不需要安装根证书。该工具使用 Android Profiler 的系统机制在调试会话内解码流量。

如何从 Network Inspector 导出数据?

Network Inspector 允许以 HAR (HTTP Archive) 格式导出数据。单击面板右上角的 Export 按钮。HAR 文件可以在任何 HAR 查看器中打开,或导入到 Charles Proxy 和 Proxyman 中进行进一步分析。

Network Inspector 会影响应用程序性能吗?

根据 Google 的数据,在进行性能分析时,开销不超过 3%。当 Network Inspector 关闭时,没有额外开销。该工具不建议在发布版本中使用,但在调试会话中,在现代设备上其影响几乎不可察觉。

如果响应显示为原始数据怎么办?

如果响应主体显示为不可读的原始数据,这可能与 gzip 压缩或二进制格式(Protocol Buffers、MessagePack)有关。Network Inspector 会自动解码 gzip。对于自定义格式,请使用响应头中的 Content-Type 提示。

总结

  • Network Inspector — 是 Android Studio 中内置的工具,用于实时监控和调试网络请求,无需修改应用程序代码
  • 自动拦截 通过 OkHttp、Retrofit、Ktor 和 UrlConnection 的所有 HTTP 调用——该工具在 Debug 版本中可以直接使用
  • 时间线 带有状态码颜色编码,可以立即发现慢速、出错和重复的请求
  • 每个请求的详细视图 包括请求头、主体(含 JSON 格式化)、Cookie 和执行时间的阶段划分
  • 计时阶段划分(DNS、TCP、TLS、Request、Response)有助于精确定位慢速请求的原因
  • 导出到 HAR 可以将会话保存起来,以便传递给同事或在 Charles Proxy 等外部工具中分析
  • 对于更复杂的场景,请使用 Charles Proxy 或 Proxyman——它们支持在操作系统级别拦截流量并与 iOS 配合使用

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读