HarmonyOS 鸿蒙Next 如何跨har访问resfile文件

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何跨har访问resfile文件


假设我有a、b两个har。其中a依赖了b,然后b的resfile目录中有个config.json文件,我如何在a中访问此文件。 

2 回复

har包无法获取上下文context,建议使用hsp,可以跨包访问rawfile 先使用Context.createModuleContext,根据模块名创建hsp的上下文,再用getRawFileContent获取

示例:

getContext().createModuleContext(‘目标hsp包名’).resourceManager.getRawFileContent((‘bundle.harmony.js’))

参考链接:Context-application-接口依赖的元素及定义-ArkTS API-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者

如果要用Har包,可以尝试暴露另一个Har包里的rawfile文件,给当前Har包用。

比如,HarA依赖HarB,HarA想用HarB中的rawFile文件,HarB中将rawFile封装成一个方法 export 出去,在HarB的Index文件暴露 ,在HarA中import方法使用HaB封装方式为直接return文件:

export function fnc() {

return $rawfile(‘icon.png’)

}

resfile目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。应用安装后,resfile资源会被解压到应用沙箱路径,通过Context属性resourceDir获取到resfile资源目录后,可通过文件路径访问。

参考文档:Context-application-接口依赖的元素及定义-ArkTS API-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者

demo:

export function fnc() {

  const context = getContext();

  let filePath = context.resourceDir + '/config.json';

  let readTextOptions: ReadTextOptions = {

    offset: 1,

    length: 0,

    encoding: 'utf-8'

  };

  let stat = fs.statSync(filePath);

  readTextOptions.length = stat.size;

  let str = fs.readTextSync(filePath, readTextOptions);

  console.info("readText succeed:" + str);

}

更多关于HarmonyOS 鸿蒙Next 如何跨har访问resfile文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,跨har(即跨模块或组件)访问resfile文件通常涉及到文件路径解析和权限控制。以下是一种直接的方法来实现跨har访问resfile文件:

HarmonyOS提供了一套资源管理框架,允许应用通过统一的资源访问接口来获取资源。要跨har访问resfile文件,首先需要确保目标文件已被正确打包到相应的har包中,并且在manifest文件中声明了必要的权限和资源访问规则。

  1. 资源路径解析:使用系统提供的资源访问API,通过资源的URI或路径来定位目标文件。这通常涉及到将资源路径从相对路径转换为绝对路径,或者通过资源ID直接访问。

  2. 权限控制:确保调用方har具有访问目标resfile文件的权限。这可以通过在manifest文件中声明requires权限来实现,或者在运行时通过权限管理API来请求权限。

  3. 资源访问:使用系统提供的资源读取接口,如ResourceTableBundleManager等,来访问目标文件。这些接口提供了读取资源文件内容的方法,可以将文件内容加载到内存中供后续处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部