You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADB远程调试Android WebView时/json接口返回空数组问题咨询

异常产生原因
  • Android 10及以上版本引入了WebView DevTools的多用户隔离机制:若目标应用运行在工作资料、双开空间或非系统主用户空间下,DevTools对应的Unix域套接字命名会追加用户ID后缀,格式为webview_devtools_remote_<uid>_<pid>,而非主用户场景下的webview_devtools_remote_<pid>。如果端口转发时错误拼接了套接字名称,会连接到无有效WebView实例的空端点,此时接口可正常响应但返回空数组,Chrome的chrome://inspect页面内置了多用户套接字自动扫描逻辑,因此不受该问题影响。
  • Chromium 90及以上版本的WebView新增了DevTools端点来源校验:直接向本地端口发起无鉴权标识的GET请求时,会被内核判定为非授权访问,直接返回空数组;而Chrome内置的inspect通道走浏览器内部专用鉴权逻辑,可正常获取页面列表。
  • 残留端口转发规则冲突:若多次执行端口转发前未清理旧规则,9222端口可能绑定到已退出进程的残留套接字上,旧进程无存活WebView实例,自然返回空数组。
可行替代实现方案
  • 操作前先清理所有残留转发规则,避免端口冲突:每次执行端口映射前先运行命令adb forward --remove-all,不要复用历史转发规则。
  • 修正套接字获取逻辑,不要手动拼接套接字名称:执行adb shell cat /proc/net/unix | grep webview_devtools_remote获取所有完整的WebView DevTools套接字全名,直接使用grep输出的完整字符串做端口转发,不要自行截取pid拼接后缀,避免漏掉多用户场景下的uid字段。
  • 绕过单进程转发的繁琐逻辑,使用全局DevTools端点:执行adb forward tcp:9222 localabstract:devtools_remote映射全局DevTools套接字后,向http://localhost:9222/json/list发起GET请求,可直接拿到设备上所有可调试的WebView、Chrome页面实例,不需要逐个进程做端口转发。
  • 解决新版本WebView的鉴权拦截问题:请求/json类接口时添加请求头Host: localhost,可绕过大部分内核版本的来源校验;如果仍返回空,可直接使用Chrome DevTools Protocol的官方客户端库建立连接,库内部已封装所有鉴权、端点匹配逻辑,不需要手动处理HTTP请求。
  • 替代/proc/net/unix的WebView进程获取方式:执行adb shell dumpsys webviewupdate可直接输出当前系统所有加载了WebView的进程pid、对应WebView版本信息,准确率高于扫描unix套接字的方案。

内容的提问来源于stack exchange,提问作者Technik_Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:18:34