HarmonyOS 鸿蒙Next har 模块不能读取 rawfile 下的资源

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

HarmonyOS 鸿蒙Next har 模块不能读取 rawfile 下的资源

场景 1:

如果entry 仅仅引入 har_lib, 且执行 har_lib(): 输出:har_lib list:  [“entry”,“har”]

场景 2:如果 entry 仅仅引入 hsp_lib, hsp_lib 引入 har_lib, 在 entry 中执行 har_lib(); 输出:  har_lib list:  [“entry”]  

我这边按照场景 2 构建的,导致在 har_lib 中 不能读取 rawfile。

请问有什么好的解决方案?

1. har_lib 模块

import { Context } from ‘@kit.AbilityKit’

export const har_lib = (context: Context): void => { const resourceManager = context.resourceManager const list = resourceManager.getRawFileListSync(’’) console.warn('har_lib list: ', JSON.stringify(list)) }

2. hsp_lib 模块:

export * from ‘har_lib’  

3. entry 模块:

import {har_lib} from ‘har_lib’ 或者 import {har_lib} from ‘hsp_lib’  har_lib(this.context)

2 回复
出现该问题原因是由于entry是直接访问不到hsp中har的资源的,需要createModuleContext才行

请参考如下实现方案:

先创建hsp的上下文,再用getRawFileContent获取内容:

getContext().createModuleContext(‘library’).resourceManager.getRawFileContent((‘bundle.harmony.js’));<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

获取hsp的上下文,请尝试这个:

Context.createModuleContext,

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/application-context-stage-V13#%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%BA%94%E7%94%A8%E4%B8%AD%E5%85%B6%E4%BB%96module%E7%9A%84context

建议把可变的moduleName放在resource目录下string配置文件,示例代码如下:

getContext().resourceManager.getStringValue($r("app.string.moduleName")).then((moduleName)=>{
getContext().createModuleContext(moduleName).resourceManager.getRawFileContent(fileName).then((value: Uint8Array) => {
console.info("getRawFileContent " + value.toString());
}).catch((error: BusinessError) => {
console.log("getRawFileContent promise error is " + error);
});
})
$rawfile(’’)参数支持拼接。<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

1、获取har所在hsp或者hap模块的模块名:解决方案:让hap或者hsp自己传参给har。

2、 若在entry引入har,无需moduleName,直接getContext().resourceManager,

       若在hsp引入,需模块名需getContext().createModuleContext(moduleName).resourceManager

注意:createModuleContext仅支持获取本应用中其他Module的Context和应用内HSP的Context,不支持获取其他应用的Context。

针对HarmonyOS 鸿蒙Next har模块无法读取rawfile下的资源问题,可能的原因及解决方案如下:

  1. 路径配置错误:确保资源文件已正确放置在rawfile目录下,并且引用路径正确无误。检查路径中是否包含特殊字符或中文,建议使用英文和数字命名文件及目录。
  2. 系统权限问题:确认应用具有访问rawfile目录及其资源的权限。可以在系统设置中检查应用权限,确保相关权限已开启。
  3. 系统缓存问题:尝试清除系统缓存或重启设备,以解决可能的缓存问题导致的资源读取失败。
  4. 系统BUG:由于鸿蒙Next为新系统,可能存在未知的BUG。建议关注华为官方发布的更新信息,看是否有相关的修复补丁。

如果以上方法均无法解决问题,可能是由于更复杂的系统或应用配置问题。此时,建议联系鸿蒙系统的官方客服,获取更专业的帮助。官网客服地址是:https://www.itying.com/category-93-b0.html

回到顶部