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/libpcap、ohos/libffi-arm、ohos/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.13、libwireshark.so.16.0.9→libwireshark.so.16、libwireshark_qt.so→libwireshark_qt.so。 patch_qt_libs.py做两件事(重编后必须重跑):libwireshark_qt.so:跳过 main() 中ws_init_version_info调用(OHOS 上 garbage %s 参数崩溃)。偏移每次重链漂移,需用llvm-objdump -d在 main 内重新定位bl ws_init_version_info@plt,文件偏移 = VMA-0x1000,读 4 字节更新脚本。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.*.c、epan/dfilter/*.c、wiretap/*_parser/*_scanner.c):OHOS 工具链无 flex/bison,删除后无法重新生成。 - OHOS stub 已内嵌:addr_resolv/manuf/KNX/QUIC 等 stub 编译进 wsutil/epan/libwireshark_qt(ohos_stubs + libintl.a + writecap),保证运行时符号完整。
- Git LFS:
ohos_deps/ohos下预编译二进制(Qt5 .so、glib .a、libintl.a 等)由 LFS 托管,推送/克隆需 git-lfs。 - 设备部署需在 DevEco Studio 配置签名;hdc 卸载/重启设备须谨慎。