EVA2文件解包原理与实践:从二进制解析到游戏资源提取
在实际游戏开发、逆向工程或资源分析工作中经常会遇到以.eva2为后缀的打包文件。这类文件通常用于存储游戏资源如模型、贴图、音频、脚本等其内部结构是经过特定算法压缩和加密的无法直接用常规压缩软件打开。因此一个专门针对 EVA2 格式的解包工具就成了开发者、Mod 制作者或安全研究人员进行资源提取和分析的必备利器。本文将从零开始深入探讨 EVA2 解包工具的原理、实现和使用方法并提供一个可运行的 Python 示例帮助你理解如何从二进制数据流中解析出原始文件。本文适合对文件格式、逆向工程或游戏资源管理感兴趣的开发者。你将了解到如何分析未知二进制格式编写简单的解包脚本并处理解包过程中常见的错误。最终你将能够理解 EVA2 文件的基本结构并具备编写或修改类似解包工具的能力。1. 理解 EVA2 文件格式与解包原理在动手编写或使用工具之前必须理解 EVA2 文件的基本构成。虽然不同游戏或引擎的 EVA2 实现细节可能不同但其核心思想是通用的它是一个容器格式内部包含一个或多个文件的索引表Header和经过处理的数据块Data Blocks。1.1 EVA2 文件的典型结构一个典型的 EVA2 文件可以抽象为以下几个部分文件头Magic Number/Version文件开头的几个字节用于标识文件类型和版本。例如可能是EVA2或EVA后跟版本号。这是判断文件是否为 EVA2 格式的第一道关卡。索引区File Table/Manifest这部分存储了容器内所有文件的元信息。通常包括文件数量每个文件的路径或哈希值用于快速定位每个文件在容器内的数据偏移量Offset每个文件的原始大小Uncompressed Size每个文件的压缩后大小Compressed Size压缩算法标识如 Zlib, LZ4, 或不压缩加密算法标识或密钥索引数据区Data Blocks这是所有文件原始内容可能经过压缩和加密连续存放的区域。索引区中的“偏移量”就是指向这个区域中某个位置的指针。解包的核心流程就是读取索引区获取每个文件的元信息然后根据偏移量和大小从数据区读取对应的数据块最后根据压缩和加密标识进行反向处理解密-解压得到原始文件并写入磁盘。1.2 常见的处理挑战在实际操作中你会遇到几个关键挑战字节序Endianness索引区中的数字如偏移量、大小可能是大端序Big-Endian或小端序Little-Endian读取错误会导致指针错乱。PC 和移动平台游戏常用的格式通常是小端序。压缩与加密数据块可能被压缩如 Zlib以节省空间也可能被加密如简单的 XOR 或 AES以保护资源。没有正确的算法和密钥解包出的将是乱码。路径存储方式文件路径可能以明文字符串存储也可能被哈希如 CRC32, MD5后存储。后者需要额外的哈希-路径映射表才能还原出有意义的文件名。2. 环境准备与工具选择在开始解包前你需要一个合适的工作环境。对于分析和小规模解包Python 是绝佳的选择因为它拥有丰富的二进制处理库和快速的脚本编写能力。2.1 基础环境配置确保你的系统已安装 Python推荐 3.8 及以上版本。你将主要用到以下 Python 内置或第三方库struct用于解析二进制数据处理字节序、整数、字符串。zlib用于解压 Zlib 压缩的数据。lz4如果需要处理 LZ4 压缩需安装lz4库 (pip install lz4)。hashlib用于计算哈希值验证文件或处理哈希路径。你可以通过以下命令安装可能需要的第三方库pip install lz42.2 辅助分析工具在编写解包脚本前使用十六进制编辑器如 010 Editor, HxD, WinHex或命令行工具xxd来直观地查看文件结构至关重要。这能帮助你定位 Magic Number、猜测索引区的位置和格式。例如使用xxd查看文件头部xxd -l 128 your_file.eva2 | head -20输出会显示前 128 个字节的十六进制和 ASCII 表示你可以从中寻找规律比如固定的字符串EVA2或者规律性的数字序列可能是文件数量。3. 编写一个最小化的 EVA2 解包脚本我们假设一个最简单的 EVA2 变种格式仅用于教学前 4 字节魔数EVA2(ASCII)紧接着 4 字节小端序存储的文件数量file_count索引区每个条目 256 字节包含前 240 字节以\x00结尾的 ASCII 文件名不足部分补零接着 4 字节小端序的数据偏移量接着 4 字节小端序的原始文件大小接着 4 字节小端序的压缩后大小如果等于原始大小则表示未压缩接着 4 字节压缩算法0无1Zlib数据区紧接索引区之后按偏移量存放数据。下面是一个针对此假设格式的 Python 解包脚本#!/usr/bin/env python3 import struct import zlib import os import sys def unpack_eva2(eva2_file_path, output_dir): 解包假设的简单 EVA2 格式文件。 if not os.path.exists(output_dir): os.makedirs(output_dir) with open(eva2_file_path, rb) as f: # 以二进制只读模式打开文件 # 1. 读取魔数和文件数量 magic f.read(4) if magic ! bEVA2: print(f错误文件魔数不匹配期望 EVA2得到 {magic.decode(ascii, errorsignore)}) return print(魔数验证通过。) file_count struct.unpack(I, f.read(4))[0] # I 表示小端序无符号32位整数 print(f索引中文件数量: {file_count}) # 2. 解析索引区 file_entries [] for i in range(file_count): # 读取文件名 (240字节以\0结尾) name_bytes f.read(240) # 找到第一个 \x00 的位置截取之前的字节作为有效文件名 null_pos name_bytes.find(b\x00) if null_pos ! -1: file_name name_bytes[:null_pos].decode(ascii, errorsignore) else: file_name name_bytes.decode(ascii, errorsignore).rstrip(\x00) # 读取元数据 offset, orig_size, packed_size, compression_flag struct.unpack(IIII, f.read(16)) file_entries.append({ name: file_name, offset: offset, orig_size: orig_size, packed_size: packed_size, compression: compression_flag # 0无1Zlib }) print(f [{i:03d}] 名称: {file_name:30} 偏移: 0x{offset:08X}, 原始大小: {orig_size}, 压缩后: {packed_size}, 压缩标识: {compression_flag}) # 3. 根据索引提取并写入文件 for entry in file_entries: f.seek(entry[offset]) # 跳转到数据区指定偏移 data f.read(entry[packed_size]) # 读取压缩/未压缩的数据块 # 处理压缩 if entry[compression] 1: try: # zlib 解压wbits 参数需要根据实际情况调整-15 表示 raw deflate 数据 data zlib.decompress(data, -15) except zlib.error as e: print(f 警告解压文件 {entry[name]} 失败: {e}。尝试保存原始数据。) # 如果解压失败保存原始数据供后续分析 elif entry[compression] ! 0: print(f 警告未知的压缩标识 {entry[compression]} 于文件 {entry[name]}。保存原始数据。) # 验证解压后大小如果解压了 if entry[compression] 1 and len(data) ! entry[orig_size]: print(f 警告文件 {entry[name]} 解压后大小 ({len(data)}) 与索引记录 ({entry[orig_size]}) 不符。) # 写入文件 # 注意文件路径可能包含子目录需要创建 output_path os.path.join(output_dir, entry[name]) os.makedirs(os.path.dirname(output_path), exist_okTrue) with open(output_path, wb) as out_f: out_f.write(data) print(f 已提取: {output_path}) print(解包完成) if __name__ __main__: if len(sys.argv) ! 3: print(用法: python eva2_unpacker.py input.eva2 output_directory) sys.exit(1) input_file sys.argv[1] output_dir sys.argv[2] unpack_eva2(input_file, output_dir)3.1 脚本关键点解析二进制读取模式open(..., rb)是必须的‘b’代表二进制模式。struct.unpack这是解析二进制数据的核心函数。格式字符串I指定了字节序和数据类型。代表小端序I代表 4 字节无符号整数。你需要根据实际文件格式调整这些参数。文件指针操作f.seek(offset)用于在文件中跳转。索引区解析完后文件指针位于索引区末尾。提取每个文件时都需要用seek跳到数据区的正确位置。路径处理os.makedirs(os.path.dirname(output_path), exist_okTrue)确保了即使文件路径包含子目录如images/icon.png也能正确创建文件夹。错误处理在解压和大小验证环节加入了警告信息。在实际工具中这里可能需要更严格的错误处理或日志记录。4. 运行验证与结果分析将上述脚本保存为eva2_unpacker.py。为了测试你需要一个符合假设格式的.eva2文件。由于我们无法提供真实的游戏文件你可以创建一个简单的测试文件来验证逻辑。4.1 创建测试用 EVA2 文件下面是一个创建符合我们假设格式的测试文件的脚本#!/usr/bin/env python3 import struct import zlib import os def create_test_eva2(output_path): files_to_pack { readme.txt: bThis is a test file for EVA2 unpacker demonstration., data/config.json: b{version: 1, name: test}, image/placeholder.dat: b\x89PNG\r\n\x1a\n b\x00 * 100 # 一个假的PNG头 } file_count len(files_to_pack) magic bEVA2 with open(output_path, wb) as f: # 1. 写入魔数和文件数量 f.write(magic) f.write(struct.pack(I, file_count)) current_data_offset 4 4 file_count * (240 16) # 计算数据区起始偏移 index_data b all_file_data b for file_path, raw_data in files_to_pack.items(): # 准备文件名240字节\0结尾 name_encoded file_path.encode(ascii) name_padded name_encoded.ljust(240, b\x00) # 压缩数据 (使用Zlib) compressed_data zlib.compress(raw_data)[2:-4] # 去掉zlib头尾得到raw deflate数据 packed_size len(compressed_data) orig_size len(raw_data) # 构建索引条目 index_entry name_padded index_entry struct.pack(IIII, current_data_offset, orig_size, packed_size, 1) # 压缩标识为1 index_data index_entry # 累积文件数据 all_file_data compressed_data current_data_offset packed_size # 更新下一个文件的偏移量 # 2. 写入索引区 f.write(index_data) # 3. 写入数据区 f.write(all_file_data) print(f测试文件已创建: {output_path} 包含 {file_count} 个文件。) if __name__ __main__: create_test_eva2(test_pack.eva2)运行此脚本生成test_pack.eva2。4.2 执行解包并验证现在使用我们的解包脚本处理这个测试文件python eva2_unpacker.py test_pack.eva2 ./output_test如果一切正常你将在./output_test目录下看到解包出的文件结构./output_test/ ├── readme.txt ├── data/ │ └── config.json └── image/ └── placeholder.dat你可以用文本编辑器打开readme.txt和config.json验证内容是否正确。placeholder.dat的前几个字节应该是\x89PNG\r\n\x1a\n。控制台输出应类似于魔数验证通过。 索引中文件数量: 3 [000] 名称: readme.txt 偏移: 0x0000013C, 原始大小: 52, 压缩后: 45, 压缩标识: 1 [001] 名称: data/config.json 偏移: 0x00000169, 原始大小: 33, 压缩后: 39, 压缩标识: 1 [002] 名称: image/placeholder.dat 偏移: 0x00000190, 原始大小: 107, 压缩后: 110, 压缩标识: 1 已提取: ./output_test/readme.txt 已提取: ./output_test/data/config.json 已提取: ./output_test/image/placeholder.dat 解包完成5. 处理真实 EVA2 文件的常见问题与排查真实的 EVA2 文件远比我们的示例复杂。当你用上面的脚本处理真实文件失败时需要按以下路径排查。5.1 排查路径与常见原因问题现象可能原因检查与解决思路魔数验证失败1. 文件不是 EVA2 格式。2. 魔数不是EVA2可能是EVA、PAK或其他。3. 文件已损坏。1. 用十六进制编辑器查看文件头 4-8 个字节。2. 修改脚本中的magic比对值。3. 确认文件来源和完整性。解压失败 (zlib.error)1. 数据不是 Zlib 格式。2. 使用了错误的压缩算法如 LZ4。3. 数据可能被加密。4. 偏移量或大小读取错误导致读取了错误的数据块。1. 检查索引中的压缩标识字段尝试其他算法。2. 先尝试不解压直接保存数据块用file命令或十六进制编辑器分析其内容。3. 验证struct.unpack的格式字符串字节序、数据类型是否正确。解包出的文件是乱码或大小不对1. 字节序错误最常见。2. 索引区结构假设错误如字段长度、顺序。3. 存在全局加密或自定义编码。1.首要检查将struct.unpack中的(小端序) 改为(大端序) 或(本地序) 重试。2. 仔细分析十六进制视图寻找规律重新定义索引结构。3. 分析第一个文件数据块的开头看是否有可识别的文件头如PKfor ZIP,PNG等。提取的文件数量远少于预期或为01. 文件数量字段的读取位置或数据类型错误。2. 索引区起始位置判断错误可能魔数后还有其它头信息。1. 确认魔数后的 4 字节是否真的是文件数量。可能需要跳过更多字节。2. 在读取文件数量后打印其值并与十六进制视图对照验证。脚本执行到一半崩溃或卡住1. 偏移量计算错误导致f.seek跳转到文件范围之外。2. 文件太大内存不足如果一次性读取所有数据。1. 在f.seek和f.read前后打印偏移量和大小确保其在文件大小范围内。2. 确保按数据块逐个读取而不是一次性加载整个数据区。5.2 高级分析技巧对于结构未知的 EVA2 文件你需要进行逆向分析寻找规律用十六进制编辑器打开搜索常见的文件头尾如PNG,DDS,WAV,UnityFS。找到后记录其在整个文件中的偏移量。定位索引在文件开头或结尾附近寻找看起来像“表格”的区域——即大量重复的、有规律的数字序列。这些数字很可能就是偏移量和大小。猜测字段假设一个条目的大小如 64、128、256 字节然后用脚本尝试以这个步长去解析文件开头后的某个区域看能否解析出合理的、递增的偏移量。动态调试修改解包脚本让它不实际写文件而是打印出它解析出的所有偏移量、大小和可能的哈希值。将这些信息与你从十六进制编辑器中观察到的真实数据位置进行比对。参考现有工具搜索如quickbms、UnityEX、AssetStudio等通用游戏解包工具看它们是否支持该游戏或引擎。这些工具的脚本.bms脚本是学习文件格式的绝佳资料。6. 生产环境工具的最佳实践与扩展方向我们编写的脚本是教学原型。一个健壮的、可用于生产的解包工具需要考虑更多。6.1 增强脚本的健壮性配置化将魔数、字节序、索引结构、压缩/加密算法等参数提取到配置文件或命令行参数中使其能适应不同变种。日志系统使用logging模块替代print支持不同日志级别INFO, DEBUG, WARNING, ERROR便于排查问题。进度反馈对于大文件显示解包进度条。完整性校验支持 MD5、SHA1 等哈希校验确保提取的数据完整无误。多线程/异步如果解包大量小文件I/O 是瓶颈可以考虑使用线程池来加速文件写入。6.2 支持更复杂的特性哈希文件名维护一个外部映射文件.toc,.manifest或内置查找表将哈希值转换为可读路径。多种压缩算法集成 LZ4、LZMA、Oodle 等游戏常用的压缩库。加密支持实现简单的 XOR 或复杂的 AES 解密。密钥可能硬编码在游戏程序内或由其他文件提供。批处理与过滤支持通配符过滤只解包特定类型的文件。6.3 安全与法律考量注意解包游戏资源可能违反最终用户许可协议EULA或著作权法。本文内容仅用于学习文件格式、数据恢复和技术研究之目的。请确保你拥有文件的合法使用权并遵守相关软件的使用条款。不得将解包后的资源用于商业用途或非法分发。开发和使用此类工具应仅限于分析自己拥有完全权利的项目文件。进行安全研究与漏洞挖掘在合法授权范围内。制作非商业性质的游戏模组Mod且遵循原游戏 Mod 政策。数据恢复和归档。理解 EVA2 这类容器格式的解包原理其价值远不止于提取几个游戏文件。它锻炼了你分析二进制结构、处理字节序、应对压缩加密、编写稳健数据处理脚本的综合能力。这些技能在文件格式开发、逆向工程、安全研究乃至底层系统开发中都非常有用。下一步你可以尝试分析其他常见的游戏打包格式如.pak,.bundle,.assets等比较它们设计上的异同逐步构建起自己的二进制文件解析工具箱。

相关新闻

小白程序员必看:AI时代前端如何破局,拥抱未来大模型趋势!

小白程序员必看:AI时代前端如何破局,拥抱未来大模型趋势!

文章分析了当前前端行业因AI技术发展而面临的挑战,指出AI在前端领域的广泛应用和替代趋势。同时,文章也提出了应对策略,建议前端开发者拥抱AI,转型全栈开发或Agent前端开发,并尽早尝试AI副业,提升自身技能和…

2026/8/4 14:32:25 阅读更多 →
Python数据分析实战:用Spotify API挖掘你的音乐DNA

Python数据分析实战:用Spotify API挖掘你的音乐DNA

1. 项目概述:用Python解锁你的Spotify音乐DNA 作为一个长期使用Spotify的音乐爱好者,我发现自己经常重复听某些歌单,却说不清楚具体的收听习惯。直到某天发现Spotify开放了完整的听歌历史数据接口,这个发现彻底改变了我理解音乐偏…

2026/8/4 14:32:25 阅读更多 →
DDrawCompat终极指南:5步让Windows 11老游戏重获新生

DDrawCompat终极指南:5步让Windows 11老游戏重获新生

DDrawCompat终极指南:5步让Windows 11老游戏重获新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDrawCo…

2026/8/4 14:31:24 阅读更多 →

最新新闻

Cocos Creator AssetManager资源生命周期管理:从加载到释放的完整指南

Cocos Creator AssetManager资源生命周期管理:从加载到释放的完整指南

1. 项目概述:为什么我们需要一个完整的资源生命周期管理?做游戏开发,尤其是用Cocos Creator,资源管理是个绕不开的坎。新手阶段,我们可能习惯用cc.loader.loadRes一把梭,项目小的时候感觉不到问题&#xff…

2026/8/4 16:10:16 阅读更多 →
什么是智慧断路器?与传统空开的核心差异及应用场景解析(2026科普)

什么是智慧断路器?与传统空开的核心差异及应用场景解析(2026科普)

一、前言在电气智能化改造、老旧配电升级、校园及工商业智慧用电落地过程中,智慧断路器已经逐步替代传统机械式空开,成为配电终端的核心设备。但目前仍有大量工程人员、运维人员、甲方采购对其核心原理、功能边界、技术优势存在认知误区,简单…

2026/8/4 16:10:16 阅读更多 →
20年电源专家严选:2026年工控设备最值得合作的5家一站式PCB-A

20年电源专家严选:2026年工控设备最值得合作的5家一站式PCB-A

**工控PCBA选型避坑指南:从“焊上就行”到“十年不坏”的实战逻辑**很多做硬件和采购的朋友,在找工控PCBA( Printed Circuit Board Assembly,印制电路板装配)厂家时,第一反应往往是“离我近点”“价格便宜点…

2026/8/4 16:10:16 阅读更多 →
Linux LVM逻辑卷管理完全指南:从基础概念到实战操作

Linux LVM逻辑卷管理完全指南:从基础概念到实战操作

Linux LVM 逻辑卷管理完全指南:从基础概念到实战操作 前言 在 Linux 系统运维中,传统的磁盘分区方案虽然简单直接,但在容量弹性、跨盘管理、数据冗余等方面存在明显短板。LVM(Logical Volume Manager,逻辑卷管理器&…

2026/8/4 16:10:16 阅读更多 →
WSL2 + Orbbec Gemini 336L + RTAB-Map ROS2 RGB-D SLAM 教程

WSL2 + Orbbec Gemini 336L + RTAB-Map ROS2 RGB-D SLAM 教程

WSL2 Orbbec Gemini 336L RTAB-Map ROS2 RGB-D SLAM 教程 本文记录在 Windows WSL2 Ubuntu ROS2 Jazzy 环境中,使用奥比中光 Gemini 336L 相机启动 RTAB-Map,运行 RGB-D SLAM,并在 RViz2 / rtabmap_viz 中查看建图结果的完整流程。 1. 整…

2026/8/4 16:10:16 阅读更多 →
编译器内建函数:性能优化与硬件操作实战指南

编译器内建函数:性能优化与硬件操作实战指南

1. 编译器内建函数深度解析在嵌入式开发和系统级编程中,我们经常需要直接操作硬件或执行特殊指令。这时候编译器提供的内建函数(Intrinsic Functions)就成为了连接高级语言与底层硬件的桥梁。不同于标准库函数,内建函数直接映射到…

2026/8/4 16:09:16 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →