Android Studio 中的 Network Inspector 是一个内置的性能分析工具,用于实时监控和分析移动应用程序的网络流量。根据 Android Developers (2025) 官方文档,该工具可以跟踪请求的执行时间、传输数据量以及每次调用的 HTTP 状态。该工具 不需要修改应用程序代码,并且可以在 API Level 14 及以上的任何项目中直接使用。
要点
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 使用与 Android Profiler 一起注入的 Profiler Agent 机制在 系统级别拦截网络调用。为了正常工作,需要应用程序的调试版本。该工具不会修改应用程序代码,也不需要为基础功能添加依赖项。
在启动性能分析时,Network Inspector 连接到应用程序的 调试进程 并监听通过 OkHttp Client、UrlConnection 或其他受支持库的所有 HTTP 调用。每个请求都带有时间戳记录,从而可以构建网络活动的时间线。对于 HTTPS,使用系统中间层,它在传输过程中保持加密,但允许在 Studio 内查看解码后的内容。
数据收集通过 Android Studio 的 Profiler Service 进行,该服务在主机的单独进程中运行。设备上运行着一个轻量级的代理程序,通过 ADB 通道传输请求的元数据。这最大限度地减少了对应用程序性能的影响——根据 Google 的数据,开销小于 3%。请求数据本身(主体、头部)仅在主动查看详细信息时传输。
// 连接 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 提供了一套工具来全面分析网络流量。每个功能都针对特定的调试任务——从检查请求头到分析 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 格式化的响应主体,包括语法高亮。如果响应无法在客户端解析,检查器中会立即看到原因:缺少字段、错误的数据类型(字符串而不是数字)或过深的嵌套。如果服务器返回错误,检查器显示包含代码和消息的错误结构。对于二进制格式(Protocol Buffers、图像),显示大小和内容类型。
Timing 选项卡将请求的执行分为各个阶段:DNS 解析、TCP 连接、TLS 握手、请求发送、响应接收。如果总时间超过 1-2 秒,可以根据阶段划分确定原因。例如,长时间的 DNS 表明解析器有问题,长时间的 TLS 握手表明服务器上的协议版本过时,长时间的响应表明服务器代码缓慢或请求包含多余数据效率低下。Timing 分析有助于在开始优化服务器端之前识别瓶颈。
Network Inspector 有助于发现冗余请求——例如,每次屏幕旋转时 Activity 都会重新加载数据。在时间线上,一连串相同的请求清楚地表明了问题。解决方法是使用缓存、使用保持状态的 ViewModel 或使用 SingleLiveEvent 进行一次性加载。
// 使用 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 有一些限制需要考虑。对于某些场景——例如拦截带有自签名证书的 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 则用于在测试版本中收集信息。
| 工具 | 类型 | 平台 | HTTPS | HAR |
|---|---|---|---|---|
| Network Inspector | 内置于 Android Studio | Android | 是 | 是 |
| Charles Proxy | 代理服务器 | 跨平台 | 是 | 是 |
| Proxyman | 代理服务器 | macOS、iOS | 是 | 是 |
| Chucker | 应用内检查器 | Android | 是 | 否 |
| Wireshark | 数据包分析器 | 跨平台 | 否 | 否 |
常见问题
确保应用程序是在 Debug 配置 下编译的,并且在连接 Android Profiler 的情况下运行。如果使用 OkHttp 4.x,可能需要将库更新到最新版本。对于 Ktor,请求仅在使用支持拦截的 Engine 的 Ktor 客户端时显示。
是的,Network Inspector 支持 HTTPS 流量,无需额外配置。与 Charles Proxy 不同,不需要安装根证书。该工具使用 Android Profiler 的系统机制在调试会话内解码流量。
Network Inspector 允许以 HAR (HTTP Archive) 格式导出数据。单击面板右上角的 Export 按钮。HAR 文件可以在任何 HAR 查看器中打开,或导入到 Charles Proxy 和 Proxyman 中进行进一步分析。
根据 Google 的数据,在进行性能分析时,开销不超过 3%。当 Network Inspector 关闭时,没有额外开销。该工具不建议在发布版本中使用,但在调试会话中,在现代设备上其影响几乎不可察觉。
如果响应主体显示为不可读的原始数据,这可能与 gzip 压缩或二进制格式(Protocol Buffers、MessagePack)有关。Network Inspector 会自动解码 gzip。对于自定义格式,请使用响应头中的 Content-Type 提示。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。