这个错误通常发生在你集成了某些第三方SDK如友盟、支付SDK等或使用了特定类型的共享包如字节码HAR或集成态HSP但你的项目构建配置没有启用必要的支持时。简单来说HarmonyOS NEXT 为了优化模块的加载和解析引入了一种标准化的模块寻址方式useNormalizedOHMUrl。一些比较新的、或者经过编译优化的依赖包强制要求你的工程也必须采用这种新的寻址方式否则编译器就“不认识”它们从而报错。️ 如何解决—— 启用标准化OHMUrl修复这个问题的核心步骤是在你项目根目录下的build-profile.json5文件中将useNormalizedOHMUrl设置为true。定位配置文件在项目根目录下找到build-profile.json5文件。添加配置在app-products对应的配置项中找到或添加buildOption-strictMode然后设置useNormalizedOHMUrl: true。配置代码示例如下json{ app: { products: [ { compatibleSdkVersion: 5.0.0(12), buildOption: { strictMode: { useNormalizedOHMUrl: true // 关键配置行 } } } ] } }配置示例参考自⚠️ 开启后的连锁反应开启这个开关不只是加一行代码那么简单它会引发一系列构建规则的收紧你需要对自己的项目代码也做相应的调整。主要体现在以下几点依赖名称必须精确匹配在oh-package.json5中引用本地模块如HSP/HAR时你定义的别名必须和该模块自身oh-package.json5文件里的name字段完全一致包括大小写。导入路径检查更严格开启后会默认开启noExternalImportByPath的严格检查。这意味着强烈建议你使用模块的导出export接口来引用而不是通过相对路径../../或绝对路径直接引用其他模块内部的代码。否则编译就会报错。模块名大小写敏感由于路径解析方式变严格所有模块的物理目录名、依赖名和代码中的导入语句其大小写都必须完全一致。 为什么会有这个配置这个配置的引入主要是为了支持更灵活的模块共享方案——集成态HSPHarmony Shared Package。传统的HSP在编译时会和主应用HAP的包名bundleName和签名强绑定导致一个HSP很难被不同包名的应用复用。而“集成态HSP”就是为了解决这个问题的中间产物。但使用这种新型HSP以及更高效的字节码HAR就必须使用标准化的OHMUrl寻址方式也就是必须开启useNormalizedOHMUrl。当你集成的第三方库使用了这些新技术时你的工程就必须同步开启以支持它们。所以这个报错可以看作是HarmonyOS NEXT生态演进过程中的一个“软强制”升级提示它推动开发者采用更规范、更先进的模块化开发方式。虽然需要你多花些功夫调整配置和代码但长期来看会让你的项目结构更清晰、更易于维护。
【HarmonyOS NEXT】not supported when useNormalizedOHMUrl is not true.
这个错误通常发生在你集成了某些第三方SDK如友盟、支付SDK等或使用了特定类型的共享包如字节码HAR或集成态HSP但你的项目构建配置没有启用必要的支持时。简单来说HarmonyOS NEXT 为了优化模块的加载和解析引入了一种标准化的模块寻址方式useNormalizedOHMUrl。一些比较新的、或者经过编译优化的依赖包强制要求你的工程也必须采用这种新的寻址方式否则编译器就“不认识”它们从而报错。️ 如何解决—— 启用标准化OHMUrl修复这个问题的核心步骤是在你项目根目录下的build-profile.json5文件中将useNormalizedOHMUrl设置为true。定位配置文件在项目根目录下找到build-profile.json5文件。添加配置在app-products对应的配置项中找到或添加buildOption-strictMode然后设置useNormalizedOHMUrl: true。配置代码示例如下json{ app: { products: [ { compatibleSdkVersion: 5.0.0(12), buildOption: { strictMode: { useNormalizedOHMUrl: true // 关键配置行 } } } ] } }配置示例参考自⚠️ 开启后的连锁反应开启这个开关不只是加一行代码那么简单它会引发一系列构建规则的收紧你需要对自己的项目代码也做相应的调整。主要体现在以下几点依赖名称必须精确匹配在oh-package.json5中引用本地模块如HSP/HAR时你定义的别名必须和该模块自身oh-package.json5文件里的name字段完全一致包括大小写。导入路径检查更严格开启后会默认开启noExternalImportByPath的严格检查。这意味着强烈建议你使用模块的导出export接口来引用而不是通过相对路径../../或绝对路径直接引用其他模块内部的代码。否则编译就会报错。模块名大小写敏感由于路径解析方式变严格所有模块的物理目录名、依赖名和代码中的导入语句其大小写都必须完全一致。 为什么会有这个配置这个配置的引入主要是为了支持更灵活的模块共享方案——集成态HSPHarmony Shared Package。传统的HSP在编译时会和主应用HAP的包名bundleName和签名强绑定导致一个HSP很难被不同包名的应用复用。而“集成态HSP”就是为了解决这个问题的中间产物。但使用这种新型HSP以及更高效的字节码HAR就必须使用标准化的OHMUrl寻址方式也就是必须开启useNormalizedOHMUrl。当你集成的第三方库使用了这些新技术时你的工程就必须同步开启以支持它们。所以这个报错可以看作是HarmonyOS NEXT生态演进过程中的一个“软强制”升级提示它推动开发者采用更规范、更先进的模块化开发方式。虽然需要你多花些功夫调整配置和代码但长期来看会让你的项目结构更清晰、更易于维护。