不使用 ADB 远程调试 Chrome/Firefox (需 ROOT)

安卓版 Chrome 和 Firefox 都需要使用 USB 线连接电脑并且开启 ADB 调试才能使用 F12 开发者工具进行远程调试操作。利用端口转发工具 socat,可以不使用 ADB,直接通过局域网来完成网页的调试。

在设置里面勾选“远程调试”之后,Chrome 会创建一个抽象(abstract) UNIX Socket,名为 chrome_devtools_remote,同样 Firefox 也会创建一个名为 org.mozilla.fenix/firefox-debugger-socket 的 abstract UNIX Socket。使用 Chrome 进行远程调试实际上执行的是下面的 ADB 指令:

1
adb forward tcp:9222 localabstract:chrome_devtools_remote

因此只需要使用其他工具将这个 socket 转换为一般的 TCP socket 就可以实现通过网络的浏览器远程调试,在这里我们使用 socat 工具。在一般的 Linux 中,abstract UNIX Socket 没有 ACL 保护,是极不安全的;但在 Android 中开启了 SELinux 并限制了普通 APP 对这类 Socket 的连接操作,因此需要使用 root 或 shell 用户来连接 APP 创建的抽象 Socket。

1
socat abstract-connect:chrome_devtools_remote tcp-listen:9222

运行指令后,在 chrome://inspect/#devices 里面添加 [IP]:9222 ,随后就可以直接开始调试。