跨模块资源访问-程序包结构-应用框架 - 华为HarmonyOS开发者
根据官方文档和项目实践,以下是关于跨模块资源访问的总结:
1. 跨模块资源访问的核心目标
- 资源共享:通过 HAR(Harmony Archive)和 HSP(Harmony Shared Package)模块,实现资源(如文本、图片、样式等)的复用,减少冗余定义。
- 模块化开发:支持功能模块的独立开发和维护,提升开发效率和代码可维护性。
2. 资源访问方式
- 直接引用 :
- 使用
$r('app.type.name')
或$rawfile('name')
访问当前模块资源。 - 使用
$r('[hsp].type.name')
或$rawfile('[hsp].name')
访问 HSP 模块资源。
- 使用
- 动态 API 访问 :
- 通过
resourceManager
接口(如getStringSync
、getMediaContentSync
)动态获取资源。 - 使用
createModuleContext
创建其他模块的上下文,获取其resourceManager
对象。
- 通过
3. 资源优先级规则
- 优先级从高到低 :
- 当前模块(HAP/HSP):自身模块的资源优先级最高。
- 依赖的 HAR/HSP 模块 :
- 如果多个依赖模块中存在同名资源,按照依赖顺序覆盖(依赖顺序靠前的优先级更高)。
4. 官方文档补充
- 资源隔离与访问控制 :
- 类似腾讯云 CAM(访问管理)的权限设计,HarmonyOS 通过模块化设计实现资源的逻辑隔离。
- 开发者可以通过显式依赖和资源命名规范避免冲突。
- 跨模块通信 :
- 除了资源访问,还可以通过模块间接口调用实现功能共享。
5. 最佳实践
- 命名规范 :为资源文件添加模块前缀(如
hsp1_icon.png
),避免命名冲突。 - 依赖管理 :在
oh-package.json5
中明确模块依赖顺序,确保资源优先级符合预期。 - 动态加载 :对于插件化场景,优先使用
resourceManager
动态加载资源。
6. 适用场景
- 多模块共享通用资源(如主题、图标、多语言文本)。
- 动态加载不同模块的资源(如插件化设计)。
如果需要进一步分析具体实现或优化建议,请告诉我!