news 2026/9/20 11:48:34

Qt 5.15.19 与 Qt for MCUs 2.11 LTS 发布解析:ESP32-S3 与 RA8D1 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt 5.15.19 与 Qt for MCUs 2.11 LTS 发布解析:ESP32-S3 与 RA8D1 实战指南

1. 这次发布到底更新了什么:从桌面到MCU的完整拼图

Qt 5.15.19 和 Qt for MCUs 2.11 LTS 前后脚发布,这个时间点放在一起看很有意思。前者是 Qt 5 系列的最终版本,官方明确表示后续不再有 Qt 5.15.20;后者则是面向裸机和 RTOS 场景的 MCU 专用框架,继续在 LTS 轨道上迭代。两条线一个收尾、一个延续,恰好勾勒出 Qt 生态当前的分工格局。

先把结论说清楚:Qt 5.15.19 是 Qt 5 的关门版本,主要价值在于给还在用 Qt 5 的项目一个稳定的最终基线,尤其是那些因为依赖库、编译器版本或历史代码而无法迁移到 Qt 6 的工业项目。而Qt for MCUs 2.11 LTS 的重点在 ESP32-S3 和 RA8D1 这两个新支持的硬件平台,以及 MCU 端地图渲染能力的增强。如果你正在做带屏的 MCU 产品,比如智能家居面板、工业 HMI、车载仪表或者便携设备,这次更新值得花时间研究。

我先把两个版本的定位差异用一张表说清楚,避免混淆:

维度Qt 5.15.19Qt for MCUs 2.11 LTS
目标平台桌面、嵌入式 Linux、部分 RTOS裸机 MCU、RTOS(FreeRTOS 等)
渲染方式OpenGL / 软件光栅QUL 专用渲染引擎,无 GPU 依赖
典型硬件x86、ARM Cortex-ACortex-M、ESP32-S3、RA8D1
内存占用几十 MB 到几百 MB几百 KB 到几 MB
开发语言C++ / QMLQML(受限子集)+ C++
本次更新重点最终稳定版,修复遗留问题新硬件支持、地图渲染、性能优化

这张表的核心信息是:两者不是替代关系,而是覆盖不同硬件层级的互补方案。桌面和 Linux 嵌入式继续用 Qt 5.15 或迁移到 Qt 6;资源受限的 MCU 场景则走 Qt for MCUs 这条线。

1.1 为什么 Qt 5.15.19 被称为"最终版本"

Qt 5.15 系列从 2020 年发布至今,已经走过了五年。按照 Qt 官方的 LTS 策略,5.15 的商业支持原本到 2025 年,这次 5.15.19 的发布基本就是给这个系列画上句号。官方在发布说明里用词很直接:这是 Qt 5 的最后一个补丁版本。

对还在用 Qt 5 的团队来说,这意味着几件事。第一,安全补丁和关键 bug 修复到此为止,后续如果发现新的问题,官方不会再出 5.15.20。第二,商业支持客户可能还有一段过渡期,但开源用户拿到的就是 5.15.19 这个终点了。第三,迁移到 Qt 6 的紧迫性进一步提升,尤其是涉及网络、图形和安全相关的模块。

我见过不少工业项目卡在 Qt 5.15 上,原因五花八门:有的依赖某个只在 Qt 5 下编译通过的第三方库,有的用了 Qt 6 已经移除的 API,还有的纯粹是项目太大不敢动。这些项目现在需要认真评估:是锁定 5.15.19 长期维护,还是分批迁移。我的建议是,如果项目生命周期还有三年以上,迁移越早越好;如果只剩一两年维护期,锁定 5.15.19 加自建补丁仓库是更务实的选择。

1.2 Qt for MCUs 2.11 LTS 的版本节奏

Qt for MCUs 走的是另一套版本号,2.11 对应的是 LTS 长期支持版本。这个系列的更新节奏比桌面 Qt 慢,但每次更新都针对具体硬件和性能场景。2.11 这个版本号背后,是 Qt 对 MCU 市场的持续投入——这个市场过去被裸机 GUI 库和各家厂商的私有方案占据,Qt 想用统一的 QML 开发体验切进来。

LTS 的意味着这个版本会获得较长时间的支持和维护,适合产品化项目。如果你在做量产产品,选 LTS 版本比追最新版更稳妥,因为 API 和行为的稳定性有保障。2.11 LTS 的支持周期官方没有给出具体年限,但参考 Qt 的 LTS 惯例,至少是三年起步。

这次更新里,ESP32-S3 和 RA8D1 的支持是硬件层面的重头戏。ESP32-S3 是乐鑫的带 AI 指令的 MCU,双核 Xtensa LX7,主频 240MHz,自带 USB OTG 和 LCD 接口,在物联网带屏设备里很受欢迎。RA8D1 是瑞萨的 Cortex-M85 芯片,主频 480MHz,带 Helium 指令集和 2D 图形加速,定位更高端的 HMI 场景。两个平台一个偏性价比、一个偏性能,覆盖了 MCU GUI 的主要需求区间。

2. ESP32-S3 上的 Qt for MCUs 实操:从环境到点亮屏幕

ESP32-S3 跑 Qt for MCUs,这件事在几年前还不太现实。MCU 的内存和算力摆在那里,传统 Qt 的运行时根本塞不进去。Qt for MCUs 通过裁剪 QML 子集、用专用渲染引擎、把资源编译进二进制等方式,把 footprint 压到了几百 KB 级别,这才让 ESP32-S3 这种级别的芯片有了跑 QML 的可能。

2.1 开发环境搭建的完整步骤

先说环境。ESP32-S3 的开发离不开 ESP-IDF,Qt for MCUs 在 ESP32-S3 上的集成也是基于 ESP-IDF 的构建系统。你需要准备的东西包括:

  • ESP-IDF v5.1 或更高版本(Qt for MCUs 2.11 对 IDF 版本有要求,太低会编译失败)
  • Qt for MCUs 2.11 LTS 安装包(从 Qt 官方获取,注意选择对应 ESP32-S3 的 BSP)
  • Python 3.8+(ESP-IDF 的构建脚本依赖)
  • CMake 3.16+Ninja(Qt for MCUs 用 CMake 构建)
  • USB 转串口驱动(ESP32-S3 开发板通常用 CP2102 或 CH343)

安装顺序有讲究。我建议先装 ESP-IDF,用官方脚本install.shinstall.bat把工具链拉全,然后验证idf.py --version能正常输出。这一步踩坑最多的是 Python 环境冲突,系统里如果有多个 Python 版本,ESP-IDF 的脚本可能找错解释器。我的做法是用 venv 隔离,或者直接用官方推荐的安装器。

Qt for MCUs 安装完之后,目录结构里会有一个platforms文件夹,里面按硬件平台分。ESP32-S3 对应的 BSP 通常在platforms/esp32-s3或类似的路径下。你需要把这个路径和 ESP-IDF 的环境变量对接起来,具体是在 CMake 配置时指定QUL_PLATFORM和工具链文件。

注意:Qt for MCUs 的 ESP32-S3 BSP 对 IDF 版本比较敏感,2.11 LTS 建议配 IDF v5.1.x,用 v5.2 以上可能会遇到组件 API 变更导致的编译错误。如果非要用新版 IDF,需要手动改 BSP 里的适配代码。

2.2 第一个 QML 界面的编译与烧录

环境就绪后,从 Qt for MCUs 自带的示例工程开始最稳妥。示例通常在examples目录下,找一个最简单的,比如hello-worldrectangle。构建流程大致是:

# 设置 ESP-IDF 环境 . $IDF_PATH/export.sh # 进入示例目录 cd examples/hello-world # 用 CMake 配置,指定 Qt for MCUs 的路径和平台 cmake -B build -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=$QUL_PATH/platforms/esp32-s3/cmake/toolchain.cmake \ -DQUL_PLATFORM=esp32-s3 # 编译 cmake --build build # 烧录 idf.py -p /dev/ttyUSB0 flash monitor

这里有几个关键点。CMAKE_TOOLCHAIN_FILE指向的是 Qt for MCUs 提供的工具链文件,它内部会调用 ESP-IDF 的编译器和链接脚本。QUL_PLATFORM指定目标平台,这个变量决定了用哪套 BSP 和渲染配置。烧录时串口设备名在 Linux 下是/dev/ttyUSB0/dev/ttyACM0,Windows 下是COMx,macOS 下是/dev/cu.usbserial-xxx

编译产物的大小值得关注。一个最简单的 QML 界面,二进制通常在 1MB 到 2MB 之间,具体取决于 QML 复杂度和资源多少。ESP32-S3 通常带 8MB 或 16MB 的 Flash,空间是够的,但 PSRAM 的配置要注意——Qt for MCUs 的渲染缓冲和 QML 引擎状态需要一定量的 RAM,如果只用内部 SRAM(512KB),复杂界面可能跑不起来。建议开发板至少带 2MB PSRAM,并在 IDF 的 menuconfig 里使能 PSRAM。

2.3 屏幕驱动与显示配置

ESP32-S3 支持多种显示接口,常见的是 SPI 屏和 RGB 接口屏。Qt for MCUs 的 BSP 里通常已经适配了几种常见的屏幕驱动,比如 ILI9341、ST7789 这类 SPI 屏,以及 RGB565 接口的屏。你需要根据自己用的屏幕修改显示配置。

配置的核心在 BSP 的显示驱动层,一般是一个 C 文件,里面定义了分辨率、颜色格式、刷新率、引脚映射等。以 SPI 屏为例,关键参数包括:

参数典型值说明
分辨率320x240 / 480x320根据屏幕型号
颜色格式RGB565MCU 场景常用,16bit
SPI 时钟40MHz / 80MHz越高刷新越快,但受屏幕限制
缓冲行数10-40 行影响 RAM 占用和撕裂
引脚MOSI/MISO/CLK/CS/DC/RST按实际接线

刷新率是 MCU GUI 的痛点。SPI 屏在 40MHz 时钟下,320x240 分辨率刷一帧大概需要 30ms 左右,也就是 30fps 出头。如果界面有动画,这个刷新率会显得卡顿。解决办法有几个:提高 SPI 时钟(有些屏能跑到 80MHz)、用 RGB 接口屏(并行传输,快很多)、或者优化 QML 减少重绘区域。我在实际项目里更倾向用 RGB 接口屏,虽然引脚多,但刷新体验好太多。

提示:Qt for MCUs 的渲染是双缓冲的,需要两块帧缓冲。320x240 RGB565 一帧是 150KB,双缓冲就是 300KB,加上 QML 引擎和堆栈,PSRAM 至少要 1MB 才比较从容。如果 RAM 紧张,可以降到单缓冲,但会有撕裂。

3. RA8D1 与 MCU 地图渲染:性能场景的玩法

RA8D1 是这次更新的另一个重点。这颗芯片的定位比 ESP32-S3 高不少,Cortex-M85 内核,480MHz 主频,带 Helium(M 系列的 SIMD 指令),还有 2D 图形加速单元。瑞萨把它定位在高端 HMI 和工业可视化场景,对标的是需要流畅图形但又不值得上 Linux 的方案。

3.1 RA8D1 的硬件特性与 Qt 适配

RA8D1 的关键特性里,对 Qt for MCUs 最有价值的是三块:Helium 指令集、2D 图形加速、大容量片上 SRAM。Helium 让矢量运算和图像处理快了一个数量级,2D 加速单元分担了填充、混合、旋转这些操作,片上 SRAM 通常有 1MB 以上,跑 Qt for MCUs 的渲染缓冲不用外挂 PSRAM。

Qt for MCUs 2.11 对 RA8D1 的适配,重点就在把这些硬件能力用起来。BSP 里会配置渲染引擎使用 2D 加速单元,QML 的图形操作会走硬件路径而不是软件光栅。这个差异在复杂界面下非常明显——软件渲染可能只有 15fps,硬件加速能到 60fps。

适配的配置主要在 BSP 的qul_config里,关键选项包括:

  • 渲染后端:选择硬件加速还是软件
  • 帧缓冲格式:RGB565 或 ARGB8888
  • 2D 加速使能:打开后填充、混合走硬件
  • Helium 优化:编译时开启对应的编译选项

这些配置在 Qt for MCUs 的构建系统里通过 CMake 变量控制,具体名称参考 BSP 文档。我的经验是,先用默认配置跑通,再逐项开硬件加速,这样出问题容易定位。一次性全开,遇到花屏或崩溃很难判断是哪块的问题。

3.2 MCU 地图渲染的实现思路

地图渲染是这次更新的一个亮点功能。在 MCU 上做地图,听起来有点不可思议——桌面上的地图渲染动辄几百 MB 内存,MCU 哪有这个资源。但 Qt for MCUs 的思路不一样,它做的是轻量级矢量地图渲染,针对的是固定区域、有限缩放层级的场景,比如车载仪表上的导航缩略图、工业设备的位置指示、智能家居的区域平面图。

实现思路大致是这样:地图数据预先处理成轻量格式,比如简化后的矢量路径或分块的位图瓦片,编译进资源或者存在外部 Flash 里。QML 端用Map或自定义的Canvas组件来渲染,Qt for MCUs 的渲染引擎负责把矢量路径转成像素。缩放和平移通过变换矩阵实现,不需要重新加载数据。

关键的技术点在于数据裁剪和层级管理。MCU 的内存放不下整张地图,所以只能加载当前视口附近的数据。Qt for MCUs 提供了资源流式加载的机制,可以从外部 Flash 按需读取瓦片。另外,缩放层级要限制,比如只支持 3 到 5 个层级,每层的细节程度不同,避免渲染压力过大。

我在类似项目里的做法是:把地图预处理成多个层级的瓦片,每个瓦片是简化后的矢量数据,QML 端根据缩放级别选择加载哪一层。平移时预加载相邻瓦片,用异步加载避免卡顿。这个方案在 RA8D1 上跑 480x480 的屏幕,缩放平移能保持 30fps 以上,体验可以接受。

3.3 地图渲染的性能调优

地图渲染的性能瓶颈通常在两个地方:矢量路径的三角化像素填充。三角化是把矢量路径转成 GPU 或 2D 加速单元能处理的三角形,这个计算量不小。像素填充是实际画到屏幕上的过程,受限于内存带宽。

优化手段有几个方向。第一,预三角化,把常用路径的三角化结果缓存起来,避免每帧重算。第二,降低路径复杂度,地图数据预处理时做简化,去掉肉眼看不出的细节。第三,分块渲染,只重绘变化的区域,静态部分不重画。第四,用 2D 加速单元的填充能力,把纯色填充和简单混合交给硬件。

Qt for MCUs 的渲染引擎本身做了不少优化,但地图这种场景还是需要应用层配合。我踩过的一个坑是:地图数据没做简化,路径点太多,三角化耗时占了帧时间的一半。后来用 Douglas-Peucker 算法把路径点砍掉 70%,帧率直接翻倍。这个教训是,MCU 上的地图渲染,数据预处理比运行时优化更重要。

4. 常见问题与排查技巧实录

MCU 上跑 Qt 遇到的问题和桌面完全不是一个路数。桌面上的问题多半是配置和依赖,MCU 上的问题往往是内存、时序、硬件适配这些底层的东西。我把实际项目中遇到的高频问题整理成一张速查表,附上排查思路。

问题现象可能原因排查方法解决方向
编译报错找不到 QUL 头文件工具链路径没配对检查 CMAKE_TOOLCHAIN_FILE确认 QUL_PLATFORM 和路径
烧录后屏幕不亮显示驱动没适配看串口日志有无显示初始化输出改 BSP 显示配置
界面花屏帧缓冲格式不匹配对比屏幕规格和配置改颜色格式或字节序
运行几秒后死机内存不足看堆栈使用和 PSRAM 配置减缓冲、开 PSRAM、优化 QML
动画卡顿刷新率不够测帧时间提 SPI 时钟、减重绘、用硬件加速
QML 加载失败资源没编译进去检查资源注册确认 qrc 或资源编译配置
触摸无响应触摸驱动没适配看触摸中断日志改 BSP 触摸配置
串口无输出波特率或引脚错确认串口配置改 monitor 波特率

4.1 内存问题的排查思路

内存是 MCU 开发绕不开的坎。Qt for MCUs 虽然做了裁剪,但 QML 引擎、渲染缓冲、资源数据加起来,占用还是不小。ESP32-S3 内部 SRAM 只有 512KB,跑复杂界面肯定不够,必须用 PSRAM。RA8D1 的片上 SRAM 大一些,但也要精打细算。

排查内存问题,第一步是看链接后的 map 文件,确认静态分配占了多少。第二步是运行时监控堆使用,Qt for MCUs 提供了内存统计接口,可以打印当前堆占用和峰值。第三步是逐个模块排查,把 QML 界面简化到最小,看内存是否正常,然后逐步加回功能,定位是哪个部分吃内存。

我遇到过一个典型案例:界面在 ESP32-S3 上跑几秒就死机,日志显示堆耗尽。查下来是 QML 里用了大量的Image元素,每张图都解码到内存里。解决办法是把图片预转成 Qt for MCUs 支持的格式,用资源编译器处理,运行时直接读压缩数据,内存占用降了 60%。

4.2 显示异常的定位方法

显示问题在 MCU 上很常见,花屏、偏移、颜色不对、撕裂,各有各的原因。定位的基本方法是从底层往上查:先确认屏幕本身能正常显示(用厂商的测试程序),再确认显示驱动配置对,最后看 Qt 的渲染输出。

花屏最常见的原因是帧缓冲格式和屏幕不匹配。比如屏幕是 RGB565,配置成了 ARGB8888,颜色就会错乱。字节序也是坑,有些屏幕高字节在前,有些低字节在前,配错了颜色会偏。偏移问题通常是时序参数不对,比如前后沿、同步脉冲宽度这些,需要对着屏幕手册调。

撕裂是另一个高频问题,原因是单缓冲下渲染和刷新的竞争。解决办法是用双缓冲,或者用屏幕的 TE(Tearing Effect)信号同步。Qt for MCUs 的 BSP 里通常有 TE 同步的配置,打开后撕裂会明显改善。

注意:调显示参数时,建议先用一个纯色填充的测试程序验证,确认屏幕能正常显示再上 Qt。这样能把屏幕问题和 Qt 问题分开,避免混在一起难定位。

4.3 QML 在 MCU 上的写法差异

Qt for MCUs 的 QML 是桌面 QML 的子集,很多桌面上能用的东西在 MCU 上用不了。写 MCU 的 QML,有几个原则要记住。

第一,避免复杂的绑定和表达式。MCU 上 QML 引擎的 JS 执行性能有限,复杂的绑定会拖慢帧率。能静态计算的就在 C++ 侧算好,QML 里只做简单赋值。

第二,少用阴影、模糊、渐变这些效果。这些在桌面上是 GPU 的事,MCU 上要么不支持,要么软件实现很慢。如果设计稿有这些效果,尽量用图片替代。

第三,控制元素数量。每个 QML 元素都有开销,几百个元素的界面在 MCU 上会很吃力。用RepeaterListView这类能复用的组件,避免重复创建。

第四,动画用属性动画,别用定时器驱动。Qt for MCUs 的属性动画是优化过的,定时器驱动的动画每帧都要跑 JS,开销大。

我个人的经验是,MCU 上的 QML 界面,元素数量控制在 100 个以内,动画用内置的,效果用图片,绑定尽量简单。按这个原则写,ESP32-S3 上跑 30fps 问题不大,RA8D1 上 60fps 也能做到。

5. 版本选型与迁移的实际建议

Qt 5.15.19 和 Qt for MCUs 2.11 LTS 这两个版本,面向的是不同的项目阶段和硬件层级。怎么选,取决于你现在的项目状态和目标平台。

5.1 Qt 5 项目的去留判断

还在用 Qt 5 的项目,现在要做一个决定:锁定 5.15.19 还是迁移 Qt 6。判断的依据主要是三条:项目剩余生命周期、依赖库的 Qt 6 支持情况、团队的技术储备

如果项目还有三年以上的维护期,且依赖库都有 Qt 6 版本,迁移是值得的。Qt 6 在图形架构、性能、跨平台支持上都有改进,长期看迁移成本会摊薄。如果项目只剩一两年,或者依赖库卡在 Qt 5 上,锁定 5.15.19 加自建补丁仓库更实际。自建补丁仓库的意思是,把官方不再维护的模块 fork 一份,自己修关键 bug,这个成本比全面迁移低。

迁移的技术难点通常在几个地方:QML 的版本差异、图形栈的变化、废弃 API 的替换。Qt 6 的 QML 有一些语法变化,图形栈从 OpenGL 转向了 RHI(Render Hardware Interface),部分 Qt 5 的图形 API 被移除。迁移前建议先做一次依赖扫描,把用了废弃 API 的地方列出来,评估工作量。

5.2 MCU 项目的平台选择

MCU 上做 GUI,平台选择主要看屏幕规格、刷新率要求、内存预算、开发周期。ESP32-S3 适合中小尺寸屏幕、刷新率要求不高、成本敏感的场景,生态好、资料多、上手快。RA8D1 适合大屏、高刷新率、图形复杂的场景,性能强但成本高、生态相对新。

Qt for MCUs 在这两个平台上的开发体验是一致的,QML 代码基本可以复用,差异在 BSP 配置和性能调优。如果产品线有多个档位,用 Qt for MCUs 可以共用一套 UI 代码,只换硬件平台,这个优势在量产项目里很实在。

我个人的建议是,新项目直接从 Qt for MCUs 2.11 LTS 起步,硬件选型时把 PSRAM 和屏幕接口作为硬指标。ESP32-S3 至少 2MB PSRAM,RA8D1 确认片上 SRAM 够用。屏幕优先选 RGB 接口,SPI 屏在动画场景下体验差距明显。开发阶段先用官方示例跑通,再逐步替换成自己的 UI,这样风险可控。

最后分享一个我在多个 MCU GUI 项目里验证过的做法:把 UI 的资源文件和逻辑代码分离,资源用 Qt 的资源编译器处理,逻辑用 C++ 写,QML 只做展示层。这样 UI 改版时不用动逻辑,逻辑改动也不影响 UI,维护起来清爽很多。MCU 项目的迭代周期通常比桌面长,前期结构清晰,后期省事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 11:46:09

X5R与X7R陶瓷电容选型本质:温度特性、材料差异与场景适配

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 11:44:22

PCB层叠设计实战:四层、六层、八层结构选型与EMC避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 11:44:11

开源动态壁纸Lively Wallpaper:原理、实操与进阶玩法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 11:43:32

Cursor 编辑器深度体验:从安装汉化到 AI 编程实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 11:42:31

API MCP Manager 跑 API 文档聚合:Cursor 的 Key 用 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 11:42:30

B站数据导出教程:用InfoSpider把观看历史与账号信息存成JSON文件

B站数据导出教程:用InfoSpider把观看历史与账号信息存成JSON文件 【免费下载链接】InfoSpider INFO-SPIDER 是一个集众多数据源于一身的爬虫工具箱🧰,旨在安全快捷的帮助用户拿回自己的数据,工具代码开源,流程透明。支…

作者头像 李华