HarmonyOS 鸿蒙Next 使用三方库中的文件时,出现找不到资源错误该如何处理

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用三方库中的文件时,出现找不到资源错误该如何处理

【问题现象】

导入一个三方库,库里有资源文件。单独的三方库能正常运行,但是被导入工程后,引用资源文件失败。

预期效果:导入三方库后,能成功使用三方库中的资源文件。

实际效果:导入三方库后,使用库中资源文件报错。

本文将以导入[@ohos](/user/ohos)/zxing": '2.1.0'中的scan_back图片为例。

问题代码如下:

(1)工程内终端上安装[@ohos](/user/ohos)/zxing。

ohpm install [@ohos](/user/ohos)/zxing
 

(2)检查工程级oh-package.json5文件,确定三方库已安装成功。

(3)在工程中使用[@ohos](/user/ohos)/zxing的scan_back图片资源,发现资源报未知资源错误。

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  build() {
    Column() {
      Image($r("app.media.scan_back")).width(100).height(100).backgroundColor(Color.Black)
    }
    .height('100%')
    .width('100%')
  }
}
 

【背景知识】

  • 添加依赖项:应用/服务支持通过包管理工具ohpm来安装、共享、分发代码,管理项目的依赖关系。
  • 三方库的使用:常用的三方库可以分为UI、动画、网络、图片、多媒体、数据存储、安全、工具等;使用方式请见链接。

【定位思路】

对于不同资源,有不同的导入方式,当前资源为三方库资源,因此得从三方库的导入方式来排查问题:

  • 模块内引用:模块只会查找自己模块内的资源,因此导入三方库的位置应该放入模块的oh-package.json5文件中,不需要放在工程级oh-package.json5文件中。
  • 工程内引用:在工程级别目录下导入三方库,若需要对应模块能使用该库,则需在三方库中暴露对应资源,再在模块中import使用。

【解决方案】

按照定位思路进行排查,确定是模块内三方库导入问题,下文将给出模块内三方库引用方式。

(1)在 entry的oh-package.json引入[@ohos](/user/ohos)/zxing。注意不要进行全局引入:ohpm install [@ohos](/user/ohos)/zxing

"dependencies": {
  "[@ohos](/user/ohos)/zxing": '2.1.0'
}

(2)在entry模块的Index.ets文件中直接引入图片Image($r("app.media.scan_back"))。

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  build() {
    Column() {
      Image($r("app.media.scan_back")).width(100).height(100).backgroundColor(Color.Black)
    }
    .height('100%')
    .width('100%')
  }
}

(3)效果如下图所示,图片已能正常显示。

【总结】

导入资源通常有下面几种方式:

  • 单HAP包应用资源:通过"$r"或"$rawfile"引用资源。
  • 跨HAP/HSP包应用资源:通过createModuleContext(moduleName)接口创建同应用中不同module的上下文,获取resourceManager对象后,调用不同接口访问不同资源。例如:getContext().createModuleContext(moduleName).resourceManager.getStringByNameSync('app.string.XXX')。
  • 系统资源:通过"$r('sys.type.resource_id')"的形式引用。
  • 三方库资源:将三方库在对应模块目录中引入使用后,再通过"$r"引用资源
1 回复

针对HarmonyOS 鸿蒙Next使用三方库中的文件时出现找不到资源错误的问题,以下是一些可能的解决方案:

  1. 检查资源路径:确保资源文件的路径和命名符合HarmonyOS的规范,且资源文件已被正确放置在项目的资源目录中。
  2. 检查oh-package.json5:查看oh-package.json5文件,确保三方库已被正确引入。同时,检查是否有版本冲突,如有需要,可通过添加overrides配置来指定依赖版本。
  3. 清理和重建项目:手动删除oh_modules目录和oh-package-lock.json5文件,然后重新打开编辑器让系统自动安装依赖,以解决可能的依赖冲突或缓存问题。
  4. 分析报错信息:仔细分析报错信息,定位问题源头。错误日志通常会提供关于错误发生位置和原因的详细信息,有助于快速定位问题。

如果以上方法均无法解决问题,建议检查三方库是否与HarmonyOS鸿蒙Next系统兼容,或尝试联系官网客服获取进一步帮助。官网客服地址:https://www.itying.com/category-93-b0.html

回到顶部