HarmonyOS 鸿蒙Next har 模块不能读取 rawfile 下的资源
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)
请参考如下实现方案:
先创建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,
建议把可变的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下的资源问题,可能的原因及解决方案如下:
- 路径配置错误:确保资源文件已正确放置在rawfile目录下,并且引用路径正确无误。检查路径中是否包含特殊字符或中文,建议使用英文和数字命名文件及目录。
- 系统权限问题:确认应用具有访问rawfile目录及其资源的权限。可以在系统设置中检查应用权限,确保相关权限已开启。
- 系统缓存问题:尝试清除系统缓存或重启设备,以解决可能的缓存问题导致的资源读取失败。
- 系统BUG:由于鸿蒙Next为新系统,可能存在未知的BUG。建议关注华为官方发布的更新信息,看是否有相关的修复补丁。
如果以上方法均无法解决问题,可能是由于更复杂的系统或应用配置问题。此时,建议联系鸿蒙系统的官方客服,获取更专业的帮助。官网客服地址是:https://www.itying.com/category-93-b0.html