我们在进行 Android 开发时,如果要调试 WebView,通常只需要连接 adb,然后就可以打开 Chrome DevTools 进行调试。
而在 HarmonyOS 上,虽然有类似 adb 的工具:hdc,但是调试 ArkWeb 却并不方便。
首先需要在需要打开调试的页面开启允许调试的开关:
@Entry(storage)
@Component
struct Index {
...
aboutToAppear(): void {
webview.WebviewController.setWebDebuggingAccess(BuildProfile.DEBUG)
}
}
这一步与 Android 无异,我们可以通过 BuildProfile.DEBUG 很方便地判断当前是否为 DEBUG 包,就不需要在上线时再将其重置为 false 了。
然后通过 hdc 连接设备,并进入 Shell:
➜ hdc shell
接着查找相关进程:
➜ hdc shell
➜ cat /proc/net/unix | grep devtools
# 0: 00000002 0 10000 1 1 49902021 @webview_devtools_remote_32259
执行命令后会输出 ArkWeb 所在 Domain Socket 端口。
退出 Shell:
➜ hdc shell
➜ exit
当然我们也有其他方式能够查询到 Domain Socket,比如通过包名:
➜ hdc shell ps -ef | grep "com.example.app"
# 20020109 32259 652 0 12:48:30 ? 00:09:04 com.example.app
输出的第二个参数就是查询到的进程 ID。
将查询到的 Domain Socket 转发至电脑的 TCP 9222 端口:
➜ hdc fport tcp:9222 localabstract:webview_devtools_remote_32259
# Forwardport result:OK
一般输出 OK 就代表转发成功了,你也可以用下面的命令检查一下
➜ hdc fport ls
# FMR0223A24001263 tcp:9222 localabstract:webview_devtools_remote_32259 [Forward]
最后就可以在熟悉的 Chrome DevTools 上进行调试了。

由于步骤比较繁琐,官方也提供了便捷脚本支持一键运行,有需要的朋友可以前往官方文档自行下载。
从 API version 20 开始,官方也支持指定端口号无线调试,简化调试流程。
