API26模拟器报错,为什么换到真机就成功了? 📅 发布时间:2026/8/27 12:19:31 👁 浏览次数: 对照环境API 26 三折叠模拟器与 ALN-AL80 真机OpenHarmony 7.0.0.32。两端使用同一 HAP、同一组 5 张公开图片、同一个scope和同一句查询词。背景初始化成功写索引时却报系统服务异常双镜记忆相机接入 Core Vision Kit 的textSearchImage后首先在 API 26 三折叠模拟器中运行。图片已经复制到应用沙箱init()也完成了调用insertImage()时持续返回1013100002 Service abnormal这类错误不能只靠重新调用接口判断原因。图片路径不可读、scope不一致、调用顺序错误和系统服务不可用都可能让检索链路失败。为了把代码问题和运行环境分开本次对照固定了所有业务输入只更换设备。固定项测试内容安装包同一次构建生成的 HAP图片湖边日落、长城、森林小路、海岸线、城市夜景共 5 张索引范围PublicPhotos查询词“夜晚的城市灯光”调用顺序init()→ 逐张insertImage()→search()模拟器每次都停在索引阶段并返回相同错误。下面的三张图记录同一套输入换到 ALN-AL80 后系统服务实际完成了什么。真机第一步5 张图片全部写入索引真机运行前应用逐张检查图片路径文件必须存在、长度大于 0并能通过ImageSource读取。随后调用 Core Vision Kit 建立索引constinitializedawaittextSearchImage.init();if(!initialized){thrownewError(语义搜图服务初始化失败);}for(constimagePathofimagePaths){conststatfs.statSync(imagePath);if(!stat.isFile()||stat.size0){thrownewError(索引文件不可读${imagePath});}constinsertedawaittextSearchImage.insertImage(imagePath,PublicPhotos);if(!inserted){thrownewError(索引写入失败${imagePath});}}ALN-AL80 上五次写入全部成功页面显示“索引完成 5 张”。图 1同一组 5 张公开图片在真机完成索引链路没有停在insertImage()。这一步排除了两个常见干扰测试图片并非只在页面中显示而没有复制到沙箱真机读取到的也不是一组临时占位数据。只有所有insertImage()成功后页面才允许执行搜索。真机第二步自然语言只返回城市夜景索引完成后查询使用相同scopeconstresultsawaittextSearchImage.search(夜晚的城市灯光,PublicPhotos,100);真机返回 1 个结果画面是测试集中的城市夜景湖边、长城、森林和海岸照片没有混入结果区。图 2真机输入“夜晚的城市灯光”结果区只显示一张城市夜景。图 2 比“接口调用成功”的日志多验证了一层系统返回的imagePath能够映射到当前相册记录结果卡片使用的也是真实图片文件。页面还会过滤已经删除、改为私密或不属于当前scope的记录。真机第三步返回路径能够打开照片详情点击图 2 中唯一的结果页面使用返回的imagePath找到对应记录并进入照片详情。详情中的城市夜景与搜索结果一致说明链路已经经过初始化、索引、搜索、路径映射和页面跳转而不是在搜索页临时放入一张预设图片。图 3真机搜索结果继续打开对应照片详情返回路径可以被业务页面使用。三张图组成了完整的成功证据图 1 证明索引写入完成图 2 证明查询返回正确照片图 3 证明返回路径能够进入真实记录。只截一张“成功”提示无法覆盖后两个环节。为什么可以把差异定位到当前模拟运行环境对照结果如下阶段API 26 三折叠模拟器ALN-AL80 真机HAP 启动成功成功沙箱图片读取成功成功textSearchImage.init()完成完成insertImage()1013100002 Service abnormal5 张全部成功search()无法进入有效查询返回 1 张城市夜景结果跳转无结果成功进入照片详情相同 HAP、文件、scope、查询词和调用顺序在真机完成整条链路而模拟器稳定停在系统服务调用阶段当前差异可以定位到该模拟器实例提供的 Core Vision 运行环境或服务状态。这个结论有明确范围它说明本次 API 26 三折叠模拟器不能作为textSearchImage成功能力的依据并不代表所有模拟器版本都必然失败也不代表所有 API 26 手机都一定成功。换系统版本、模拟器镜像或真机型号后都应重复同一组固定输入。遇到1013100002时按什么顺序排查1. 先记录失败发生在哪个接口分别记录init()、每一次insertImage()和search()的返回值。只保留最终错误文案会丢失真正的失败阶段。2. 在调用前检查文件insertImage()接收应用可访问的图片路径。文件存在、长度有效、ImageSource能解码三项应在进入系统服务前完成。资源图片能显示在页面上不等于传给接口的沙箱路径正确。3. 固定scope、数据集和查询词索引与搜索使用不同scope时接口即使没有抛错也不会返回预期结果。对照测试不要同时更换图片、查询语句和设备否则无法确定是哪一项改变了结果。4. 使用同 API 级别真机复现真机继续失败时应检查权限、文件格式、服务可用性和设备支持范围真机完成图 1 至图 3而模拟器稳定返回相同服务错误时再把排查重点转向模拟器镜像和系统服务。5. 错误页面保留真实返回模拟器版本继续显示原始错误码和重试入口。测试代码不把失败结果替换为固定成功数据否则既验证不了异常处理也无法确认真机返回的imagePath是否真的可用。模拟器和真机怎样分工三折叠模拟器仍然适合验证单屏、双屏和展开窗口的断点布局也适合反复检查加载、空结果、错误提示与重试交互。Core Vision 返回真实图片路径、Camera 硬件能力和图像文件落盘则使用真机结果作为结论。本次测试最终确认ALN-AL80、OpenHarmony 7.0.0.32 上textSearchImage能够为 5 张公开图片建立索引用“夜晚的城市灯光”返回唯一的城市夜景并通过返回路径进入真实照片详情同一调用在当前 API 26 三折叠模拟器中返回1013100002 Service abnormal。把索引、查询和结果跳转都拍成可复查的真机证据后“换真机成功”才不只是一句经验判断而是一条能继续排查、也能在其他设备上重复的验证链路。