HarmonyOS鸿蒙Next中Error Message: Failed to resolve OhmUrl. Failed to get a resolved OhmUrl for.......

HarmonyOS鸿蒙Next中Error Message: Failed to resolve OhmUrl. Failed to get a resolved OhmUrl for…

hvigor ERROR: Failed :entry:default@CompileArkTS
hvigor ERROR: ArkTS Compiler Error

1 ERROR: 10311002 ArkTS: ERROR

Error Message: Failed to resolve OhmUrl. Failed to get a resolved OhmUrl for “hvigor_ignore_E:_Huawei_OpenHarmony-Project_MyApplication4_entry_src_main_cpp_types_libentry_Index.d.ts” imported by “E:\Huawei\OpenHarmony-Project\MyApplication4\entry\src\main\ets\pages\Index.ets”.

  • Try the following:

    Check whether the “undefined” module which hvigor_ignore_E:_Huawei_OpenHarmony-Project_MyApplication4_entry_src_main_cpp_types_libentry_Index.d.ts belongs to is correctly configured. Check if the corresponding file name “hvigor_ignore_E:_Huawei_OpenHarmony-Project_MyApplication4_entry_src_main_cpp_types_libentry_Index.d.ts” is correct(including case-sensitivity).

COMPILE RESULT:FAIL {ERROR:2}

请问这个报错该如何解决?


更多关于HarmonyOS鸿蒙Next中Error Message: Failed to resolve OhmUrl. Failed to get a resolved OhmUrl for.......的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

【背景知识】 工程应用代码包含hvigor-config.json5、build-profile.json5等构建配置文件,用于配置构建环境,定制构建流程,包括构建工具版本和依赖、多目标构建配置等。build-profile.json5文件分为工程级与模块级,工程级build-profile.json5文件主要包含以下内容:

  • 工程结构的信息,即应用工程中需要参与构建的所有模块,包括模块名、模块路径等。
  • 应用构建所需基础配置信息,包括应用名、SDK版本、签名等。
  • 构建多目标应用的定制化配置,包括product、buildMode等。

其中,工程级build-profile.json5配置文件中字段strictMode用于定义严格模式,含有noExternalImportByPathuseNormalizedOHMUrl和caseSensitiveCheck等配置字段。

  • noExternalImportByPath:布尔值类型,选择是否严格检查绝对路径导入方式和相对路径跨模块导入方式。
  • useNormalizedOHMUrl:布尔值类型,选择是否使用标准化的OHMUrl格式,标准化的OHMUrl统一了原有OHMUrl的格式,使用集成态HSP和字节码HAR需使用标准化的OHMUrl格式。

【解决方案】 经分析是导入文件大小写不匹配导致的编译错误,可参考以下方法解决:

  1. 确保导入文件的大小写与路径完全匹配: 检查并确认所有导入文件的路径和文件名的大小写完全一致。例如,如果文件名为MyFile.ets,则在代码中引用时必须写为import MyFile from './MyFile.ets',而不是import myfile from './myfile.ets'
  2. 启用严格模式: 在配置文件build-profile.json5中,设置strictMode字段,并将useNormalizedOHMUrl配置为true。这样编译器会对导入文件的大小写进行严格检查,如果文件名大小写不正确,会导致编译报错。示例如下:
    "strictMode":{
      "noExternalImportByPath": true,
      "useNormalizedOHMUrl": true,
    }
    
  3. 检查并调整导入文件的路径和大小写格式:
    • 确保所有文件路径和文件名的大小写格式符合严格模式的要求。
    • 使用相对路径或绝对路径引用时,务必保持路径和文件名的大小写一致性。
    • DevEco Studio NEXT Beta1(5.0.3.800)版本开始,当useNormalizedOHMUrl字段为true时,oh-package.json5中依赖的包使用的别名需要和依赖包的oh-package.json5的name保持一致,否则编译会报错。
    • 统一工程中的OHMUrl格式,确保所有HAR/HSP的OHMUrl格式与工程级build-profile.json5中的配置一致。例如,如果build-profile.json5中配置了useNormalizedOHMUrl为true,则所有引用的HAR/HSP文件的OHMUrl必须严格按照配置的格式编写。

更多关于HarmonyOS鸿蒙Next中Error Message: Failed to resolve OhmUrl. Failed to get a resolved OhmUrl for.......的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主尝试按照下面思路排查一下

1.在项目根目录执行:

hvigorw clean
rm -rf build .hvigor hvigor
hvigorw assembleEntry

2.检查 entry/src/main/cpp/types/ 目录,确认 .d.ts 文件是否存在;不存在则先解决 C++ 模块的编译。

3.打开 entry/src/main/ets/pages/Index.ets,检查是否有直接 import …d.ts 的代码,如有请删除。

4.如果是 IDE 自动生成的 import,建议升级 DevEco Studio 到最新版本(有些版本确实会生成错误的 d.ts 引用)。

你这个错误属于ArkTS编译时的模块路径解析异常。 错误码10311002说明模块引用路径错误:Index.ets文件导入的hvigor_ignore_E:_Huawei…Index.d.ts文件未正确配置模块归属;也有可能存在路径大小写不一致或实际文件缺失。

解决办法:

1/看看build-profile.json5中的模块路径配置,确保路径中的大小写与实际目录结构一致:

// build-profile.json5示例

"modules": [

  {

    "name": "entry",

    "srcPath": "./entry/src/main"  // 需与实际路径完全匹配

  }

]

2/在oh_package.json5中确认依赖配置,若涉及跨模块引用,需通过har方式导入:

// entry模块的oh_package.json5配置示例

"dependencies": {

  "@ohos/hvigor-ohos-plugin": "1.0.0" // 确保所有依赖模块均已声明

}

3/ 删除entry目录下的build和.preview文件夹,执行菜单栏File > Sync and Refresh Project,重启DevEco Studio

编译器无法解析 hvigor_ignore_E:_Huawei_OpenHarmony-Project_MyApplication4_entry_src_main_cpp_types_libentry_Index.d.ts 的文件路径,提示模块未正确配置或文件名错误

检查 hvigor_ignore_ 前缀路径是否由构建工具自动生成或配置错误。确保文件实际存在且路径无特殊符号或空格。

模块声明:确认 Index.d.ts 所属模块在 oh-package.json5 中正确声明,尤其是涉及 C++ 混合开发的模块配置。

文件名大小写:验证路径中所有文件名与磁盘实际名称完全一致(包括大小写敏感问题)。

删除 entry 目录下的 build 和 .preview 缓存文件夹,重新执行构建操作以排除缓存干扰。

找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

设置这样也不行

"useNormalizedOHMUrl": true

请问你解决了吗这个问题,

鸿蒙Next中该错误通常由资源引用路径问题导致。请检查ohos.global.systemresourcetable.ResourceTable中声明的资源ID与实际资源路径是否匹配,确认资源文件是否被正确编译打包至HAP内。

这个错误表明ArkTS编译器在编译 Index.ets 文件时,无法解析一个名为 hvigor_ignore_E:_Huawei_OpenHarmony-Project_MyApplication4_entry_src_main_cpp_types_libentry_Index.d.ts 的类型声明文件(.d.ts)。

核心问题:项目中的C++代码(在 src/main/cpp 目录下)生成了对应的ArkTS API声明文件(.d.ts),但编译器在依赖解析时,无法正确定位到这个文件。

主要原因和解决方案

  1. C++模块未正确编译或配置:这是最常见的原因。.d.ts 文件是由C++模块(Native API)编译后自动生成的。如果C++代码本身编译失败,或者该模块的构建配置(oh-package.json5CMakeLists.txt)不正确,会导致此文件缺失或路径错误。

    • 解决方法:首先确保你的C++模块能够单独编译成功。在IDE(如DevEco Studio)中,尝试先对 entry 模块或整个项目进行一次 “Clean Project” (清理项目),然后执行 “Rebuild Project” (重新构建)。这能确保C++代码被完整编译并生成正确的类型声明文件。
  2. 文件路径或名称问题:错误信息提示检查文件名(包括大小写)是否正确。在Windows系统上,路径中的冒号 : 和下划线 _ 的组合 _E:_ 可能是一个转换后的表示,但编译器预期的是标准路径。

    • 解决方法:检查 entry 模块下的 oh-package.json5 文件,确认其中关于Native依赖(如果有)的配置路径是否正确。同时,检查 src/main/cpp 目录结构以及 CMakeLists.txt 中的目标名称是否与ArkTS侧导入的模块名匹配。
  3. 依赖声明缺失:在 Index.ets 或相关文件中,可能通过 import/// <reference> 方式引用了一个由C++模块提供的类型,但该模块的依赖关系未在 oh-package.json5 中明确定义。

    • 解决方法:在 entry 模块的 oh-package.json5 文件中,确保 dependenciesnativeDependencies 字段里正确声明了对本地C++模块(通常其名称在 CMakeLists.txt 中定义,例如 "libentry.so" 对应的模块)的依赖。

建议的操作步骤

  1. 在DevEco Studio中,执行 File > Sync and Refresh Project
  2. 执行 Build > Clean Project
  3. 执行 Build > Rebuild Project
  4. 如果问题依旧,请重点检查 entry/src/main/cpp 目录下的代码和 CMakeLists.txt 配置,确保没有语法错误且编译目标配置正确。同时,核对 entry/oh-package.json5 中的依赖配置。

通常,执行一次完整的清理和重建可以解决因编译缓存或生成文件不完整导致的此类问题。

回到顶部