harmonyos跨模块资源访问
举个例子,在实际开发中,例如多个模块都要用到背景图片,调用公共模块的图片资源总比各个单独的资源目录下。除此之外,图标,提示音,还有许多场景会出现资源重合的问题,重复的媒体资源会占用不必要的存储空间,增加应用大小,降低用户下载欲望,后期更改也要更改多个地方,十分繁琐。
·
资源访问方式
在harmonyOS里,我们对于资源访问是通过$r()和$rawfile()
例如:
Text($r('app.string.test_string'))
Image($rawfile("testImage.png"))
在多人协作,多模块开发中,跨模块读取资源是必不可少的,接下来介绍几种跨模块资源调取的方式
在学习开始之前,我们建立har模块和hsp模块,并在资源目录下创建一些测试资源

跨HAR/HSP包调用资源
语法:$r('[模块名].string.test_string') 和$rawfile('模块名].testImage.png')
Text($r('[模块名'].string.test_string'))
Image($rawfile('模块名'].testImage.png'))
[moduleName].type.name获取资源。其中,moduleName为hsp模块名,type为资源类型,name为资源名称。
HSP包的资源导出引用
在Hsp模块的index下,我们可以创建一个资源管理类,管理导出的资源
export class HspResManager{
static getPic(): Resource{
return $r('app.media.huawei');
}
static getHspstring(): Resource{
return $r('app.string.Hspstring');
}
}
在需要导入hsp资源的地方依赖该模块

demo
import {HspResManager}from 'hsp_library'
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@State har:string ='[har_library].string.har_string'
build() {
Tabs({barPosition:BarPosition.End}){
TabContent(){
Column(){
Text(this.message)
}
}
.tabBar('entry模块')
TabContent(){
Column(){
Text($r(this.har))
}
}
.tabBar('HAR模块')
TabContent(){
Column(){
Text(HspResManager.getHspstring())
.fontSize(20)
Image(HspResManager.getPic())
.height(100)
}
}
.tabBar('HSP模块')
}
.height('100%')
.width('100%')
}
}


结语
举个例子,在实际开发中,例如多个模块都要用到背景图片,调用公共模块的图片资源总比各个单独的资源目录下。除此之外,图标,提示音,还有许多场景会出现资源重合的问题,重复的媒体资源会占用不必要的存储空间,增加应用大小,降低用户下载欲望,后期更改也要更改多个地方,十分繁琐。
更多推荐



所有评论(0)