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

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

【问题现象】

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

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

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

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

问题代码如下:

  1. 工程内终端上安装@ohos/zxing
ohpm install @ohos/zxing
  1. 检查工程级oh-package.json5文件,确定三方库已安装成功。

点击放大

  1. 在工程中使用@ohos/zxingscan_back图片资源,发现资源报未知资源错误。
@Entry
@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. entryoh-package.json引入@ohos/zxing注意不要进行全局引入: ohpm install @ohos/zxing
"dependencies": {
  "@ohos/zxing": '2.1.0'
}
  1. entry模块的Index.ets文件中直接引入图片Image($r("app.media.scan_back"))
@Entry
@Component
struct Index {
  build() {
    Column() {
      Image($r("app.media.scan_back")).width(100).height(100).backgroundColor(Color.Black)
    }
    .height('100%')
    .width('100%')
  }
}
  1. 效果如下图所示,图片已能正常显示。

点击放大

【总结】

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

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

更多关于HarmonyOS鸿蒙Next中使用三方库中的文件时,出现找不到资源错误该如何处理的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中使用三方库中的文件时,出现找不到资源错误该如何处理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用三方库时,出现找不到资源错误,通常是由于资源路径或资源ID未正确配置或引用导致的。以下是可能的原因及解决方法:

  1. 资源路径问题:确保三方库中的资源文件路径正确,且资源文件已正确打包到应用中。检查resources目录下的资源文件是否完整,路径是否与代码中的引用一致。

  2. 资源ID冲突:如果三方库与主应用中的资源ID存在冲突,可能导致资源无法正确加载。可以通过在resources目录下为三方库资源添加前缀或命名空间来避免冲突。

  3. 资源未正确引用:在代码中引用资源时,确保使用正确的资源ID。如果三方库提供了资源ID的常量或工具类,建议使用这些工具类来引用资源,避免手动输入ID导致的错误。

  4. 资源未正确编译:检查三方库的资源文件是否已正确编译到最终的APK或HAP文件中。可以通过解压APK或HAP文件,查看资源文件是否存在。

  5. 资源加载时机问题:某些资源可能在应用启动时未正确加载,导致使用时找不到资源。确保资源在需要时已正确加载,可以通过延迟加载或异步加载的方式解决。

  6. 资源文件格式问题:确保三方库中的资源文件格式符合HarmonyOS的要求,特别是图片、布局等资源文件。如果资源文件格式不正确,可能导致无法加载。

  7. 资源文件权限问题:检查三方库中的资源文件是否具有正确的访问权限,确保应用在运行时可以访问这些资源文件。

通过以上步骤,可以排查并解决在HarmonyOS鸿蒙Next中使用三方库时出现的找不到资源错误。

回到顶部