为什么不能直接跑 PyQt?

把 Spyder 这样的科学计算 IDE 搬到鸿蒙 PC,很多开发者的第一反应是“装个 Python 环境,pip install spyder 不就行了?”但在鸿蒙的 HAP 沙箱机制下,这条路根本走不通。

核心障碍有三点:首先,普通 HAP 应用沙箱内只有 ArkTS 运行时,没有原生的 Python 解释器;其次,Spyder 依赖的 PyQt/QtWidgets 需要复杂的 CPython 绑定和 sip 编译器交叉编译,这在移动端构建体系中极难实现;最后,传统的 Qt 5.x 默认依赖 X Server (XCB),而鸿蒙 PC 使用的是自研的图形栈,离屏渲染也需要特定的平台抽象。

因此,工程上唯一可行的路径是**“Qt C++ 宿主 + 内嵌 libpython”**。我们利用 libqohos.so 作为 Qt 的 QPA 平台插件,将 Qt Widgets 直接绘制到鸿蒙的 NativeWindow 上,同时将 CPython 3.12 编译为共享库嵌入 HAP。这样既保留了 Spyder 熟悉的原生 GUI 体验,又绕过了系统级 Python 环境的缺失,实现了真正的“自带运行时”。

整体架构:渲染链与执行链解耦

在动手写代码前,必须理清四层架构的分工,这是后续排查问题的基石:

  1. ArkTS 薄壳:负责应用生命周期管理、XComponent 承载以及首次启动时解压 Python 标准库。
  2. libqohos.so:Qt 的平台抽象层,负责将 OHOS 原生 API 适配为 Qt 调用,处理输入事件翻译。
  3. libspyder_shell.so:业务宿主,负责渲染三栏 UI(编辑器、控制台、变量区)以及调度 Python 子进程。
  4. libpython3.12.so:真正的 CPython 解释器,运行在独立的子进程中,执行用户脚本。

这种设计的关键在于渲染链与执行链的彻底解耦。窗口画不出来查 QPA,F5 没输出查 fork/pipe,变量不显示查 JSON 协议。每一层都能独立验收,避免全栈耦合导致的调试黑洞。

第一阶段:三栏 UI 与基础回显验证

Phase 1 的目标极其克制:只验证 Qt 宿主稳定性,不加载 Python 解释器

我们需要构建一个标准的三栏布局:左侧 QTabWidget 作为代码编辑器,中间 QPlainTextEdit 作为只读控制台,右侧 QTableWidget 预留给变量浏览器。此时,F5 运行按钮绑定的回调只需在控制台打印 [Phase1] Run signal received

验收标准

  • 应用启动后,三栏界面清晰可见,缩放正常。
  • 编辑器可输入文本,菜单响应灵敏。
  • 点击运行或按 F5,控制台确切出现上述标记字符串。

如果这一步失败,问题通常出在 libqohos.so 的链接或 XComponent 的对接上,此时切勿引入 Python 复杂度,应先夯实图形渲染链路。

第二阶段:CPython 3.12 子进程执行闭环

Phase 2 进入深水区,核心任务是让 Python 代码真正跑起来

由于 HAP 沙箱限制,我们不能直接 execv 一个 python 二进制文件。解决方案是将 CPython 编译为 libpython3.12.so,并在 C++ 侧通过 fork 创建子进程,子进程内 dlopen 该库并调用 Py_BytesMain 启动解释器。

这里有两个关键陷阱必须规避:

  1. 标准库首启部署:将约 14MB 的 spyder_python_runtime.zip 置于 rawfile,首次启动时由 ArkTS 解压至 filesDir/python,并写入 marker 文件校验完整性。后续启动跳过解压,确保 PYTHONHOME 路径稳定。
  2. nostrip 铁律libpython3.12.so 严禁被 strip。构建配置中必须设置 nativeLib.debugSymbol.strip=false。一旦符号表丢失,dlopen 将找不到 Py_BytesMain 导致 SIGABRT。

验收标准

  • 内置一段 Demo 代码(如打印 Hello 及循环计数)。
  • F5 触发后,控制台能实时流式输出 Python 脚本的 stdout 内容。
  • 若脚本报错,Console 能完整捕获并显示 traceback。

第三阶段:Variable Explorer 变量实时探查

Phase 3 是区分“能跑代码”与“可用 IDE"的分水岭。我们需要在脚本执行结束后,捕获全局变量并渲染到右侧表格。

实现方案是在子进程中注入一个轻量级 Runner 协议。脚本执行完毕后,Runner 遍历 globals(),过滤掉内置模块,将变量名、类型、大小及值摘要序列化为 JSON,并用特殊标记包裹:

print("SPYDER_VARS_BEGIN")
print(json.dumps(rows, ensure_ascii=False))
print("SPYDER_VARS_END")

C++ 宿主监听 stdout,提取标记间的 JSON 数据,解析后填充 QTableWidget

验收标准

  • 运行包含多个变量定义的脚本(如 list, dict, custom class)。
  • 控制台输出正常的同时,右侧表格实时更新,准确显示变量名、类型(如 listdict)及值的前 300 字符摘要。
  • 多标签切换时,变量区能随当前激活文件的状态正确刷新。

避坑指南与真机验收

在实际落地过程中,两个 ABI 问题最为致命。首先是 Qt 版本错位:HAP 包内自带的 Qt runtime 往往是 5.12 版本,而本地交叉编译环境可能使用 5.15 头文件。务必检查代码中是否使用了 5.15 特有符号(如 QString::arg 的某些重载),否则真机 dlopen 时会因符号缺失崩溃。其次是剪贴板权限,鸿蒙 PC 对 READ_PASTEBOARD 有严格的 system_basic 权限限制,普通签名应用无法直接读取系统剪贴板,需在 module.json5 中正确声明并处理授权拒绝的逻辑。

最终的真机验收(如在 MateBook Pro 上),应看到完整的编辑 - 执行 - 探查闭环:代码修改保存、F5 运行出结果、变量区实时联动。这标志着我们成功在鸿蒙 PC 上构建了一个不依赖外部环境的原生科学计算工作站。
 

  网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

初级黑客

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。

②学习网络安全相关法律法规。

③网络安全运营的概念。

④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试 的流程、分类、标准

②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking

③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察

④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令

②Kali Linux系统常见功能和命令

③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构

②网络通信原理、OSI模型、数据转发流程

③常见协议解析(HTTP、TCP/IP、ARP等)

④网络攻击技术与网络安全防御技术

⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础

②SQL语言基础

③数据库安全加固

6、Web渗透(1周)

①HTML、CSS和JavaScript简介

②OWASP Top10

③Web漏洞扫描工具

④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

  想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取

网络安全学习路线&学习资源

网络安全工程师企业级学习路线

很多小伙伴想要一窥网络安全整个体系,这里我分享一份打磨了4年,已经成功修改到4.0版本的《平均薪资40w的网络安全工程师学习路线图》对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

  1. 如图片过大被平台压缩导致看不清的话,大家记得点个关注,关注之后系统后台会自动发送给大家!到时候记得看后台消息就行了。


    学习资料工具包

    压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。

    ​​​​​​

    网络安全源码合集+工具包

    ​​​​

    视频教程

    ​​​​

    视频配套资料&国内外网安书籍、文档&工具

    ​​​
     

    网络安全学习路线&学习资源

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐