我们在进行 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 上进行调试了。

DevTools

由于步骤比较繁琐,官方也提供了便捷脚本支持一键运行,有需要的朋友可以前往官方文档自行下载。

从 API version 20 开始,官方也支持指定端口号无线调试,简化调试流程。