一次构建显示成功手机里打开的却是旧页面电脑同时连接模拟器和真机安装命令又把包推到了另一台设备。命令行开发最容易漏掉的环节是把源码、构建产物、目标设备和运行结果连成同一条可核对的链路。DevEco CLI 提供统一的检查、构建、部署和界面操作入口。下面用一个山海图鉴小应用跑通这条链路先检出一处规则错误修复后生成 HAP再明确指定一个可见模拟器安装运行最后通过真实页面操作检查筛选结果。工具版本为 DevEco CLI 1.3.2配套 DevEco Studio 26.0.0.821。先固定工具版本与部署目标这个实验使用 HarmonyOS 7 配套开发工具应用界面采用 API 24 已支持的基础组件。构建目标为 26.0.0最低兼容版本为 6.1.1API 24实际运行系统是 API 24。工具版本、构建目标和设备系统版本分别记录可以避免把“用了新工具”误写成“新接口已在旧系统运行”。项目固定条件用途CLI1.3.2对照命令参数和行为IDE 工具链26.0.0.821固定检查器与构建器应用ToolingLab独立包名防止覆盖其他业务应用可见模拟器API 24x86_64验证基础图鉴交互连接编号127.0.0.1:5557每条设备命令显式指定安装前配置包管理器缓存、临时目录与安装根目录多版本 IDE 共存时使用 DEVECO_CLI_STUDIO_PATH 指定选中的工具链。不要仅凭终端能找到命令就认定版本正确应再读取 CLI 版本及子命令帮助。安装和更新方法见官方快速入门。创建工程时显式传入应用名、包名和最低 API避免脚手架自动选择比测试设备更高的版本。生成后审查目标 SDK 与最低兼容版本移除未配置材料的签名配置引用。模拟器测试使用未签名 HAP需要推送真机时另行配置合法调试签名及设备授权。用真实规则错误检验检查链路搜索模块先把查询去掉首尾空格、转换小写然后匹配名称与标签。规则配置启用严格相等检查。故障样本在判断空字符串时使用双等号检查器准确报告了所在行、错误级别和 eqeqeq 规则。修复把比较改为严格相等没有改变搜索算法或删除检查规则。devecocli --version devecocli create --app-name ToolingLab --bundle-name com.example.harmony7toolinglab --api-level 24 cd ToolingLab devecocli check lint --format json --output-path lint-before.json # 修复报告中的严格相等错误再生成新的报告 devecocli check lint --format json --output-path lint-after.json devecocli build --build-mode debug devecocli run --device 127.0.0.1:5557 --skip-build devecocli ui layout --device 127.0.0.1:5557 --format json devecocli ui click --device 127.0.0.1:5557 --id filter-water实际报告由 1 个错误变为零问题。这里应看 errors、warnings 和具体问题列表而不要把报告中的 filesChecked 当成覆盖率该版本在零问题报告中返回了 0不能据此断言没有执行检查也不能宣称已经统计了全部源码文件。保留前后原始报告和修复差异才有足够依据解释检查结果。检查报告不能覆盖语义正确性。例如把未匹配查询偷偷返回全部条目可能依然没有规则错误。还要针对搜索合同执行测试空查询返回三条水系返回两条英文标签忽略大小写未知关键词返回空集合条目名称可以直接匹配。让查询模型独立于页面状态CatalogSearch 返回完整的新条目集合页面只负责接收查询、展示结果和显示说明。数据规模只有三个条目选择每次创建小集合避免把可变数组作为全局缓存交给页面。测试额外修改一次返回对象的标签再发起新查询确认这次修改不会污染种子数据。exportclassCatalogEntry{id:string;name:string;tags:string[];description:string;constructor(id:string,name:string,tags:string[],description:string){this.idid;this.namename;this.tagstags;this.descriptiondescription;}}exportclassCatalogSearch{staticfind(query:string):CatalogEntry[]{constnormalized:stringquery.trim().toLowerCase();constentries:CatalogEntry[][newCatalogEntry(xuangui,玄龟,[水,龟],玄龟本实验的水系图鉴条目。点击筛选后可继续查看说明。),newCatalogEntry(qingniao,青鸟,[山,bird],青鸟本实验的鸟类图鉴条目。英文标签也参与检索。),newCatalogEntry(yinglong,应龙,[水,龙],应龙本实验的龙类图鉴条目与玄龟共同匹配水系筛选。)];if(normalized){returnentries;}returnentries.filter((entry:CatalogEntry){constsearchable:string${entry.name}${entry.tags.join( )}.toLowerCase();returnsearchable.includes(normalized);});}}这里的检索是确定性的名称和标签包含匹配适合验收 CLI 工具链。自然语言文搜图仍需接入对应视觉服务关键词搜索的结果不能替代语义检索结果。图鉴模块的输入足够小检查重点是规范化、空结果和界面同步不做大数据量性能结论。六项逻辑测试直接读取这份查询源码进行转译和执行覆盖空查询、中文标签、英文空格及大小写、无匹配、名称查询以及返回值修改隔离。它们验证的是查询逻辑组件渲染和设备安装留给后面的模拟器步骤。页面把关键动作暴露成稳定节点TextInput 的文本绑定查询状态两个按钮分别选择水系与恢复全部。每次查询改变时清空上一次选中的说明防止筛选结果已经变化页面底部却还展示不属于当前集合的条目。空结果有独立文案页面不会把零条数据误认为加载中。EntryComponentstruct Index{Statequery:string;Stateentries:CatalogEntry[]CatalogSearch.find();Stateselected:string;privatesearch(value:string):void{this.queryvalue;this.entriesCatalogSearch.find(value);this.selected;}build(){Scroll(){Column({space:16}){Text(山海图鉴 · CLI 实验).fontSize(26).fontWeight(FontWeight.Bold)Text(系统 API${deviceInfo.sdkApiVersion}· ToolingLab r1).fontSize(14).fontColor(#47617B)Text(按名称或标签查找随包条目).fontSize(16)TextInput({text:this.query,placeholder:输入 玄龟 / 水 / bird}).id(catalog-query).onChange((value:string)this.search(value))Row({space:12}){Button(筛选水系).id(filter-water).onClick(()this.search(水))Button(恢复全部).id(reset-catalog).onClick(()this.search())}Text(找到${this.entries.length}条).id(result-count).fontSize(20)if(this.entries.length0){Text(没有匹配条目请更换关键词).id(empty-result).padding(20)}ForEach(this.entries,(entry:CatalogEntry){Column({space:6}){Text(entry.name).fontSize(22).fontWeight(FontWeight.Medium)Text(entry.tags.join( · )).fontSize(16)Button(查看条目).id(open-${entry.id}).onClick((){this.selectedentry.description;})}.width(100%).padding(16).backgroundColor(#E8F1F5).borderRadius(14)},(entry:CatalogEntry)entry.id)if(this.selected.length0){Text(this.selected).id(selected-description).fontSize(18).padding(16)}}.width(100%).padding({left:22,right:22,top:48,bottom:32})}.width(100%).height(100%).backgroundColor(#F5F8FA)}}关键按钮和结果区域设置稳定节点标识。自动化可以按标识查找位置再执行点击避免在屏幕尺寸或字体改变后继续使用旧坐标。条目列表用业务 ID 作为键同名显示文本不会导致脚本点错对象。页面还显示实际系统 API 与应用修订标记便于确认打开的是目标应用。构建成功后再验证实际界面CLI 构建依次执行依赖安装、工程同步和编译打包。成功日志结束后计算输出 HAP 的 SHA-256保存到运行记录。接着使用 run 的显式设备参数安装并用 skip-build 部署同一产物这样检查过的包和安装的包可以对应起来。首次打开显示三条图鉴。执行“筛选水系”后页面显示两条内容为玄龟与应龙点击玄龟的“查看条目”下方出现相应说明。随后恢复全部再输入未知英文关键词结果为零条且出现空结果提示。这个顺序同时覆盖状态更新和旧说明清理。操作预期结果核对位置打开图鉴三条条目查询为空结果数与列表筛选水系玄龟、应龙两条列表名称与查询框查看玄龟显示玄龟说明说明区域恢复全部三条且旧说明清空列表与说明区域输入未知关键词零条与明确空结果提示结果数与提示为自动化设置失败出口检查失败时先定位具体规则不继续打包构建失败时不安装历史目录中的旧 HAP。目标设备缺失或编号变更时停止设备操作并重新确认映射不能自动选择设备列表第一项。屏幕节点缺失时重新读取当前布局不把找不到按钮当作点击成功。截图也需要回读安装命令返回启动成功只说明启动请求已提交不能替代页面核对。检查截图中的应用名、系统版本、结果数与条目内容才能确认验收的是目标功能。包摘要保存在内部运行记录不必把完整机器目录或签名材料写进文章。这套流程适合迁移到空间化项目的基础功能让 CLI 负责重复的检查与部署让业务测试负责数据合同再让目标设备上的操作结果验证用户行为。涉及 3D 运行库、视觉模型或设备传感器时还需增加对应能力的真实结果检查基础页面通过并不会自动覆盖这些外部条件。参考DevEco CLI 官方工具文档、常用开发任务。当前工具链复验2026-09-242026年9月24日重新固定CLI 1.3.2和Studio 26.0.0.821并补齐版本、检查与构建过程记录及文件摘要清单。故障样本检出1个eqeqeq错误修复后为0真实搜索源码的6项宿主用例通过增量构建生成未签名HAP。特别注意此次CLI在报告含错误时仍返回进程退出码0流水线应检查JSON中的summary.errors并在大于0时失败退出。配置只启用eqeqeq不代表完整质量或安全审计零问题报告的filesChecked0也不代表统计了检查覆盖率。当时没有已连接的可见模拟器因此新产物没有部署也没有为此新建实例。上文API24界面图属于历史运行材料不能与9月24日构建记录合并为一次连续验收。