HarmonyOS 鸿蒙Next资源文件导出

HarmonyOS 鸿蒙Next资源文件导出 鸿蒙三层架构下Har中的资源文件怎么导出,HAP包能使用?

7 回复

【解决方案】

直接导出资源路径:通过r或r或rawfile语法封装资源路径并导出:

  1. 定义资源访问方法:在HAR模块中封装资源路径,例如:
// HAR模块/src/main/ets/utils/ResManager.ets
export class ResManager {
  // 导出图片资源
  static getImage(): Resource {
    return $r('app.media.iconHar');
  }
  // 导出rawfile原始文件
  static rawFileExample(): string {
    return $rawfile('icon.png');
  }
}
  1. 在Index.ets中导出:
// HAR模块/Index.ets
export { ResManager } from './src/main/ets/utils/ResManager';
  1. HAP包调用:
import { ResManager } from 'har名称';
Image(ResManager.getImage()) // 加载HAR中的图片

【总结】

通过封装资源管理类或直接导出资源路径,结合Index.ets统一管理导出接口,可实现HAR资源的高效复用,同时规避资源冲突问题。开发时需注意HAR与HAP的构建依赖关系及资源优先级规则。

更多关于HarmonyOS 鸿蒙Next资源文件导出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. 在har里面进行文件统一导出

    cke_546.png

  2. 在使用的包里面对包进行依赖

    cke_2293.png

  3. 在依赖的包里面导入使用

    cke_4948.png

    按照这三步来妥妥的能用

资源文件只需要包依赖过后就能使用了。

资源放置与声明

资源文件需存放在HAR模块的resources目录下(如/src/main/resources/base/element等),通过工具类封装资源访问

// HAR模块资源管理类
export class ResManager {
  static getImage(): Resource {
    return $r('app.media.icon_har'); // 访问media资源
  }
  static getString(): Resource {
    return $r('app.string.har_desc'); // 访问字符串资源
  }
}

在HAR模块的oh-package.json5中指定入口文件:

{
  "main": "Index.ets"
}

HAP引用HAR资源

在HAP模块的oh-package.json5中添加HAR依赖:

"dependencies": {
  "library": "file:../library.har"
}

执行npm install安装依赖。

通过封装类访问资源:

import { ResManager } from 'library';

@Component
struct IndexPage {
  build() {
    Image(ResManager.getImage())
    Text(ResManager.getString())
  }
}

直接使用$r语法(需确保HAR资源路径正确)

$r('app.media.icon_har')  // HAR的media资源
$r('app.string.har_desc') // HAR的字符串资源

跨模块(HAP、HSP或HAR)访问HAR资源和访问模块自身资源一样。

在编译后,har 中的资源会合并到 hap 中。无需导出, 就可以在 hap 包中使用:

Image($r('app.media.your_har_img'))

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-cross-module-resource-access#section17921546133810

![cke_4479.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4nOydd5hU5Z3Hf+97/fc9znnPPOO+98999//7vf/e7X/3u///s6f9+/f/789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//789//7

鸿蒙Next的资源文件导出主要使用DevEco Studio工具完成。在项目中,资源文件存储在resources目录下,包括图形、布局、字符串等。导出时,系统会自动编译这些资源并打包到HAP文件中。对于多语言资源,会根据设备语言设置自动匹配对应目录(如zh_CN、en_US)下的资源文件。在编译构建过程中,资源文件会被优化并生成对应的.idx索引文件。如需单独导出资源,可通过DevEco Studio的Build功能生成HAP后解压获取。

在HarmonyOS Next的三层架构中,Har模块的资源文件导出和使用流程如下:

  1. Har模块资源导出:
  • 在Har模块的resources目录下正常放置资源文件
  • 编译时会自动将资源打包到.har文件中
  • 资源ID会通过生成的ResourceTable类对外暴露
  1. HAP包使用Har资源:
  • 在HAP的build.gradle中添加对Har模块的依赖
  • 通过ResourceManager API访问资源
  • 使用格式:ResourceTable.Type_resourceName(如ResourceTable.String_app_name)
  1. 注意事项:
  • Har中的资源会与HAP资源合并,需避免命名冲突
  • 系统会根据设备配置自动选择匹配的资源
  • 资源引用在编译时会被正确解析

这种设计保持了HarmonyOS的资源隔离机制,同时实现了模块间的资源共享。

回到顶部