OH-Shark 依赖与构建说明

本仓库由三层组成,协作产出可部署到 HarmonyOS 的 Qt 版抓包应用(bundle: com.wireshark.qt)。

wireshark-qt5 (源码) + ohos_deps (预编译依赖)  --交叉编译-->  build 产物 .so
        ↓ 同步 + 打补丁
ohos/wireshark_app_qt/entry/libs/arm64-v8a/*.so
        ↓ hvigor 打包
entry-default-signed.hap + qEmbeddedUiExtensionHost-default-signed.hap
        ↓ hdc install
设备

目录作用

目录 作用
wireshark-qt5/ Wireshark 4.0.9 源码 + OHOS 移植(ohos/ 目录、dumpcap/capture 的 VPN 抓包分支、Qt 界面修改)。源码用普通 git 管理
ohos_deps/ OHOS 交叉编译依赖:ohos/qt5(预编译 Qt 5.12.12)、ohos/glib-arm(glib + libintl.a)、ohos/libpcapohos/libffi-armohos/stubs(gcrypt 等 stub)、src/(各依赖源码与构建脚本)。预编译二进制(.so/.a/.tar.gz)用 Git LFS 管理
ohos/wireshark_app_qt/ HarmonyOS HAP 工程:ArkTS(Qt 嵌入、VPN 扩展)、native(tun_capture.c)、部署库与补丁脚本。

完整复现步骤(新机器)

# 1. clone(含 LFS 大文件)
git clone <OH-Shark 远程>
cd OH-Shark
git lfs pull

# 2. 交叉编译 Wireshark 库
cd wireshark-qt5
# 参考已提交的构建目录配置(build-tools cmake + ohos-aarch64 toolchain)
cmake -G Ninja \
  -DCMAKE_TOOLCHAIN_FILE=<绝对路径>/wireshark-qt5/cmake/cross-compile/ohos-aarch64.cmake \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DBUILD_wireshark=ON -DBUILD_dumpcap=ON -DBUILD_tshark=ON -DBUILD_logray=OFF \
  <绝对路径>/wireshark-qt5
ninja run/libwireshark_qt.so

# 3. 同步库到 HAP 工程
#    build_ohos2/run/libwireshark_qt.so → ohos/wireshark_app_qt/entry/libs/arm64-v8a/
#    版本化命名:libwsutil.so.14 / libwiretap.so.13 / libwireshark.so.16 及其非版本名

# 4. 应用二进制补丁(运行时必需)
python ohos/wireshark_app_qt/scripts/patch_qt_libs.py ohos/wireshark_app_qt/entry/libs/arm64-v8a

# 5. 构建 HAP 并安装
cd ohos/wireshark_app_qt
# DevEco 打开工程 → build → 安装 entry + qEmbeddedUiExtensionHost 两个 HAP

库同步 + 补丁

  • 编译产物在 wireshark-qt5/build_ohos2/run/(构建目录不入库,属可再生产物)。
  • 同步时版本化命名libwsutil.so.14.0.0→libwsutil.so.14(+libwsutil.so)libwiretap.so.13.0.9→libwiretap.so.13libwireshark.so.16.0.9→libwireshark.so.16libwireshark_qt.so→libwireshark_qt.so
  • patch_qt_libs.py 做两件事(重编后必须重跑):
    1. libwireshark_qt.so:跳过 main() 中 ws_init_version_info 调用(OHOS 上 garbage %s 参数崩溃)。偏移每次重链漂移,需用 llvm-objdump -d 在 main 内重新定位 bl ws_init_version_info@plt,文件偏移 = VMA-0x1000,读 4 字节更新脚本。
    2. libwireshark.so.16:跳过 WireGuard dissector 全部 9 处 wg_mix_hash 调用(gcrypt 无 BLAKE2S)。同样需重新定位偏移。

注意事项

  • 无 lrelease:OHOS Qt 工具链没有 lrelease,QT5_ADD_TRANSLATION 生成空 .qm。中文翻译(Edit→Preferences→Appearance→Language→Chinese)当前不生效;如需汉化须用外部 lrelease 生成有效 .qm。
  • flex/bison 生成文件必须保留lex.*.cepan/dfilter/*.cwiretap/*_parser/*_scanner.c):OHOS 工具链无 flex/bison,删除后无法重新生成。
  • OHOS stub 已内嵌:addr_resolv/manuf/KNX/QUIC 等 stub 编译进 wsutil/epan/libwireshark_qt(ohos_stubs + libintl.a + writecap),保证运行时符号完整。
  • Git LFSohos_deps/ohos 下预编译二进制(Qt5 .so、glib .a、libintl.a 等)由 LFS 托管,推送/克隆需 git-lfs。
  • 设备部署需在 DevEco Studio 配置签名;hdc 卸载/重启设备须谨慎。